2011-02-17 94 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