【问题标题】:Ninject 2.2 multiple bindingsNinject 2.2 多重绑定
【发布时间】:2011-02-17 08:59:25
【问题描述】:

我最近将 ASP.NET MVC 3 应用程序更新为 Ninject 2.2。

以前我在我的主应用程序中有以下实现绑定接口:

Bind(typeof(IMyInterface<>)).To(typeof(MyImplementation<>)).InRequestScope();

此外,我的主应用正在加载的不同程序集中有以下内容:

var arg = new ConstructorArgument("info", "something");
Bind<IMyInterface<MyClass>>().To<MyImplementation<BlogComment>>().WithParameter(arg);

这在以前运行良好,并且正在识别更具体的实现(带有参数的实现)。但是,当我升级到 Ninject 2.2 时,我收到以下错误:

Error activating IMyInterface{MyClass}
More than one matching bindings are available.
Activation path:
 2) Injection of dependency IMyInterface{MyClass} into parameter myParam of constructor of type SomeOtherClass
 1) Request for IMyInterface

Suggestions:
 1) Ensure that you have defined a binding for IMyInterface{MyClass} only once.

从 2.0 到 2.2 进行了哪些更改导致此问题,是否有解决方法?

【问题讨论】:

    标签: asp.net-mvc ninject-2


    【解决方案1】:

    Ninject 2.2 确保在解析实例时只存在一个匹配的绑定。 2.0 返回了第一个匹配绑定的实例,忽略了其他绑定。但是,如果只请求一个绑定,则具有多个绑定反映了错误的配置,并且可能导致难以检测到意外行为。

    但我看到应该有可能用更具体的绑定来否决开放的通用绑定。我一定会研究它,它会被添加到错误修复版本或下一个主要版本中。

    【讨论】:

    • 谢谢,很高兴看到开源开发人员回答他们各自项目的 SO 问题。
    • 那么这个项目有实际的错误修复吗?它现在正在杀死我们。如果没有,我们什么时候可以发布支持此功能的下一个版本?
    • 同上 - 我为此浪费了很多时间。
    • 2014 仍然没有答案?我刚刚遇到了与 Ninject 3.0 相同的问题!根据个人经验,我知道 Autofac 对这种情况没有任何问题。有什么解决方法吗?
    • 请参阅stackoverflow.com/questions/21574898/… 以获取有关 Ninject 3 的此问题的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 2019-10-15
    相关资源
    最近更新 更多