[英]Ninject Factory extension vs. Lazy<T>
我正在尝试注入延迟计算的参数:
private readonly Lazy<IIdentifier> _userIdentifier;
public DocumentController(Lazy<IIdentifier> userIdentifier)
{
_userIdentifier = userIdentifier;
}
userIdentifier
是不昂贵的创建,但是这是一个的WebAPI应用,并且userIdentifier
从另一对象,它取决于提取HTTPContext
,这是在空App_Start
时间。 在控制器的构造函数中必须指定Lazy
似乎是一种代码味道,因为控制器在合成时不需要知道或关心此参数是否需要特殊处理。
它被这样注入:
kernel.Bind<IIdentifier>()
.ToMethod(x => kernel.Get<IMinimalSecurityToken>().UserID);
在这种情况下,我认为我不能使用Ninject Factory扩展,因为它不像更新对象的实例那样简单。 我宁愿不写一个工厂来处理这种情况,尽管我认为这样做比将Lazy
粘贴到控制器中更好,所以我希望有某种方法可以使用Ninject的自动工厂只是没有想到。
如果您不想使用工厂,并且我同意工厂不能完全满足这里的用例。 相反,您可以使用提供程序为您提供令牌。
public class MyIdentityProvider : Provider<IIdentifier>
{
...
}
kernel.Bind<IIdentifier>().ToProvider<MyIdentityProvider>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.