C# 可以选择使用Ninject注入属性

C# 可以选择使用Ninject注入属性,c#,.net,ninject,C#,.net,Ninject,对于Ninject 2.2,是否有任何方法可以选择性地注入属性?在一个库中,我注入了一个性能管理器,如下所示: [Inject] public IPerformanceManager PerformanceManager { private get; set; } 但是在这个库的许多使用中,我对性能分析不感兴趣,所以我希望这个属性为null。如果我根本没有为IPerformanceManager声明绑定,则会出现以下错误: 激活IPerformanceManager时出错 没有匹配的绑

对于Ninject 2.2,是否有任何方法可以选择性地注入属性?在一个库中,我注入了一个性能管理器,如下所示:

[Inject]
public IPerformanceManager PerformanceManager
{
    private get; set;
}
但是在这个库的许多使用中,我对性能分析不感兴趣,所以我希望这个属性为null。如果我根本没有为IPerformanceManager声明绑定,则会出现以下错误:

激活IPerformanceManager时出错 没有匹配的绑定可用, 并且该类型是不可自绑定的。 激活路径:5)注入 依赖项IPerformanceManager到 类型的属性性能管理器 插件管理器等

好吧,很公平。因此,我尝试将其绑定到一个返回NULL的方法:

kernel.Bind<IPerformanceManager>().ToMethod(m => null);
kernel.Bind().ToMethod(m=>null);
但现在它给出了一个错误:

激活IPerformanceManager时出错 使用IPerformanceManager中的绑定 to方法提供程序返回null。 激活路径:5)注入 依赖项IPerformanceManager到 类型的属性性能管理器 插件管理器等


那么注入的属性永远不能为NULL?我觉得这很奇怪。您知道如何实现可选的注入属性吗?

您应该能够使用
OptionalAttribute来装饰PerformanceManager


这将防止内核在无法解析绑定器时引发激活异常。它会将您的依赖项设置为空,正如您所希望的。

很好,谢谢。。。在文档中的任何位置都找不到此项。是否可以将绑定标记为可选,以便不使用可选属性装饰每个位置?@bsnote,绑定不能设置为可选