Ninject 2.2多重绑定

Oma*_*mar 3 asp.net-mvc ninject-2

我最近更新了ASP.NET MVC 3应用程序到Ninject 2.2.

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

Bind(typeof(IMyInterface<>)).To(typeof(MyImplementation<>)).InRequestScope();
Run Code Online (Sandbox Code Playgroud)

另外,我在主应用程序加载的另一个程序集中有以下内容:

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

这在以前工作得很好,并且正在认识到更具体的实现(带有参数的实现).但是,当我升级到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.
Run Code Online (Sandbox Code Playgroud)

从2.0到2.2的变化导致了这种变化,是否有解决方法?

Rem*_*oor 5

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

但我发现应该有可能用更具体的方法否决开放的通用绑定.我肯定会调查它,它将被添加到错误修复版本或下一个主要版本.

  • 谢谢,很高兴看到开源开发人员回答他们各自项目的SO问题. (3认同)
  • 那么这个项目是否有实际的错误修复?它现在正在杀死我们.如果没有,我们什么时候可以期待下一个版本发布支持这个? (2认同)
  • 同上 - 我已经失去了很多时间. (2认同)