我正在尝试注入一个延迟评估的参数:
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 的自动工厂,我只是没有想到。