繁体   English   中英

Ninject工厂扩展与懒惰<T>

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM