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