我想为 NInject (v1.0) 创建一个 OnePerSessionBehavior,并且我基本上已经让它工作了。剩下的唯一问题是如何使用 .WithArguments() 传递新参数,因为每个新会话都要求从容器中获取某些内容。现在,我将对容器的引用保留为应用程序变量,因此该模块仅加载一次,因此绑定仅发生一次。
例如,以下内容为每个新会话返回“Something”的单独实例,但传递给所有会话的构造函数参数是相同的 DateTime。
Bind<ISomething>()
.To<Something>()
.Using<OnePerSessionBehavior>()
.WithArgument("currentDateTime", DateTime.Now);
你能通过 lamda 作为你的论点吗?例如,如果你有一个这样的类:
public class Something : ISomething
{
public Something(Action<DateTime> initializer)
{
var now = initializer();
}
}
您可以按如下方式绑定它:
Bind<ISomething>()
.To<Something>()
.Using<OnePerSessionBehavior>()
.WithArgument("initializer", () => { return DateTime.Now; });
虽然我不知道你的确切情况,但另一个想法是创建你的对象而不用担心参数注入,并且then设置你的属性:
kernel.Bind<ISomething>().To<Something>().Using<OnePerSessionBehavior>();
var mySomething = kernel.Get<Something>();
mySomething.DateCreated = DateTime.Now;
or:
mySomething.Initialize(DateTime.Now);
这些想法中的任何一个都可行吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)