2011-02-17 129 views
3

我最近更新了ASP.NET MVC 3应用程序到Ninject 2.2。Ninject 2.2多重绑定

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

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

另外,我在这是一个由我的主要应用程序加载不同的装配如下:

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

这以前工作得很好,更具体的实现(与参数的实现)正在被识别。然而,当我升级到2.2 Ninject,我收到以下错误:

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,是造成这一点,有没有解决办法?

回答

5

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

但是我发现应该有可能用更具体的规则来否决开放的通用绑定。我一定会研究它,它会被添加到修补程序版本或下一个主要版本。

+3

非常感谢开源开发人员回答他们各自项目的SO问题。 – Omar 2011-02-17 23:08:28