我最近将 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 进行了哪些更改导致了此问题?是否有解决方法?
Ninject 2.2 确保解析实例时仅存在一个匹配的绑定。 2.0 返回第一个匹配绑定的实例,忽略还有其他绑定。但是,如果仅请求一个绑定,则拥有多个绑定反映了错误的配置,并且可能导致难以检测到意外行为。
但我认为应该有可能用更具体的绑定来推翻开放的通用绑定。我一定会研究它,它将被添加到错误修复版本或下一个主要版本中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)