(可选)使用Ninject注入属性

Mik*_*ain 4 .net c# ninject

使用Ninject 2.2,有没有办法可选择注入属性?在库中,我注入了一个性能管理器,如下所示:

[Inject]
public IPerformanceManager PerformanceManager
{
    private get; set;
}
Run Code Online (Sandbox Code Playgroud)

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

激活IPerformanceManager时出错没有匹配的绑定可用,并且该类型不可自我绑定.激活路径:5)将依赖关系IPerformanceManager注入到PluginDomainManager类型的属性PerformanceManager中......

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

kernel.Bind<IPerformanceManager>().ToMethod(m => null);
Run Code Online (Sandbox Code Playgroud)

但现在它给出了错误:

使用从IPerformanceManager到方法Provider的绑定激活IPerformanceManager时出错,返回null.激活路径:5)将依赖关系IPerformanceManager注入到PluginDomainManager类型的属性PerformanceManager中......

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

Vad*_*dim 5

您应该能够使用.装饰您的PerformanceManager OptionalAttribute

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