【问题标题】:Optionally inject a property with Ninject可选择使用 Ninject 注入属性
【发布时间】:2011-03-01 06:18:58
【问题描述】:

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

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

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

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

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

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

但现在它给出了错误:

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

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

【问题讨论】:

    标签: c# .net ninject


    【解决方案1】:

    你应该可以用OptionalAttribute装饰你的PerformanceManager

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

    【讨论】:

    • 完美,谢谢...在文档中的任何地方都找不到。
    • 是否有可能将绑定标记为可选,以便不使用可选属性装饰每个地方?
    • @bsnote,绑定不能设置为可选
    猜你喜欢
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    相关资源
    最近更新 更多