(可选)使用Ninject注入属性

时间:2011-03-01 06:18:59

标签: c# .net ninject

使用Ninject 2.2,有没有办法可选地注入属性?在库中,我按如下方式注入性能管理器:

[Inject]
public IPerformanceManager PerformanceManager
{
    private get; set;
}

但是在这个库的许多用途中我对分析性能不感兴趣,所以我希望这个属性为null。如果我根本没有为IPerformanceManager声明绑定,我会收到以下错误:

  

激活IPerformanceManager时出错   没有匹配的绑定,   并且类型不可自我绑定。   激活路径:5)注射   依赖IPerformanceManager进入   属性PerformanceManager的类型   PluginDomainManager等......

好的,公平的。所以相反,我尝试将它绑定到一个返回NULL的方法:

kernel.Bind<IPerformanceManager>().ToMethod(m => null);

但是现在它给出了错误:

  

激活IPerformanceManager时出错   使用来自IPerformanceManager的绑定   方法Provider返回null。   激活路径:5)注射   依赖IPerformanceManager进入   属性PerformanceManager的类型   PluginDomainManager等......

所以注入的属性永远不能为NULL?我觉得这很令人惊讶。有关如何完成可选注入属性的任何想法吗?

1 个答案:

答案 0 :(得分:5)

您应该能够使用OptionalAttribute

装饰您的PerformanceManager

如果无法解析活页夹,这将阻止内核抛出激活异常。它会将您的依赖项设置为null,就像您想要的那样。