在NInject中实现OnePerSessionBehavior

我想为NInject(v1.0)创建一个OnePerSessionBehavior,我大部分时间都在使用它。 剩下的唯一问题是如何使用.WithArguments()传递新参数,因为每个新会话都要求容器中的内容。 现在我将容器的引用保留为应用程序变量,因此模块只能加载一次,所以绑定只发生一次。

例如,以下内容返回每个新会话的“Something”的单个实例,但传递给所有会话的构造函数参数是相同的DateTime。

Bind() .To() .Using() .WithArgument("currentDateTime", DateTime.Now); 

你可以通过lamda作为你的论点吗? 例如,如果您有这样的类:

 public class Something : ISomething { public Something(Action initializer) { var now = initializer(); } } 

您可以按如下方式绑定它:

 Bind() .To() .Using() .WithArgument("initializer", () => { return DateTime.Now; }); 

虽然我不知道你确切的情况,但另一个想法是创建你的对象而不用担心参数注入, 然后设置你的属性:

 kernel.Bind().To().Using(); var mySomething = kernel.Get(); mySomething.DateCreated = DateTime.Now; 

要么:

 mySomething.Initialize(DateTime.Now); 

这些想法会有效吗?

您传递的是在绑定定义期间评估的值。 这就是为什么你一遍又一遍地获得相同的价值。 实际上从我的头脑中我没有一个简单的答案,但我肯定会考虑它,因为它可能对我的测试目的有用。