使用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?我觉得这很令人惊讶。有关如何完成可选注入属性的任何想法吗?
答案 0 :(得分:5)
您应该能够使用OptionalAttribute
如果无法解析活页夹,这将阻止内核抛出激活异常。它会将您的依赖项设置为null,就像您想要的那样。