2010-03-26 32 views
1

使用NInject解析具有多個構造函數的類似乎不起作用。注入具有多個構造函數的類

public class Class1 : IClass 
{ 
public Class1(int param) {...} 
public Class1(int param2, string param3) { .. } 
} 

下似乎並沒有工作:

IClass1 instance = 
    IocContainer.Get<IClass>(With.Parameters.ConstructorArgument(「param」, 1)); 

模塊中的鉤很簡單,之前我添加了額外的構造工作: bind()將();

+3

不要用重載的構造函數進行DI操作。它引入了不必要的含糊之處:http://stackoverflow.com/questions/2470102/how-does-unity-resolve-know-which-constructor-to-use/2470404#2470404 – 2010-03-26 09:50:57

回答

5

它不起作用的原因是在.ctor選擇過程中沒有考慮手動提供的.ctor參數。 .ctors根據它們有多少個參數類型綁定的參數來評分。在激活期間,會應用手動提供的.ctor參數。既然你沒有int或string的綁定,他們不會被評分。您可以通過將[Inject]屬性添加到您希望使用的.ctor來強制進行評分。

4

您遇到的問題是Ninject根據可用的綁定參數的數量選擇.ctors。這意味着Ninject從根本上不理解重載。

您可以通過在綁定中使用.ToConstructor()函數並將其與.Named()函數結合來解決此問題。這讓你可以爲同一個類創建多個綁定到不同名稱的不同構造函數。這是一個小問題,但它有效。

我維護我自己的軟件開發博客,所以這最終成爲了一篇文章。如果你想要一些示例代碼和更多的解釋,你應該檢查它。

http://www.nephandus.com/2013/05/10/overloading-ninject/

相關問題