我正在使用Unity IoC容器來解析我的對象。但是,我遇到了一個問題。當我有多個構造函數時 - Unity如何知道使用哪一個?當我有一個和一個沒有時,它似乎使用帶參數的那個。我可以明確告訴它使用哪個構造函數嗎?指定Unity IoC容器使用的構造函數
具體來說,我有一個情況類似於下面的人類有兩個構造函數。在這種情況下,我希望IoC容器使用默認構造函數 - 不帶參數 - 但它選擇帶參數的構造函數。
public class SomeValueObject
{
public SomeValueObject(string name)
{
Name = name;
}
public string Name { get; set; }
}
public class Person
{
private string _name;
public Person()
{
_name = string.Empty;
}
public Person(SomeValueObject obj)
{
_name = obj.Name;
}
}
這顯然失敗了,因爲它不能創建SomeValueObject - 不知道要注入到它的字符串參數。它給出的錯誤是:
解析依賴失敗,type =「MyApp.Person」,name =「」。異常消息是:當前構建操作(構建鍵構建鍵[MyApp.Person,null])失敗:嘗試調用構造函數MyApp.Person(MyApp.SomeValueObject obj)時無法解析參數obj。 (策略類型BuildPlanStrategy,指數3)
容器登記:
Container.RegisterType<Person, Person>(new Microsoft.Practices.Unity.ContainerControlledLifetimeManager());
而解決:
var person = Container.Resolve<Person>();
是不是IoC的使用接口? – Martin 2010-01-29 13:10:44
當然,我主要是這麼做的。但是這對問題沒有影響。 – stiank81 2010-01-29 13:13:02
@Martin許多程序員使用類並避免了製作接口的假通用性,然後只實現了它。它還可以避免在大多數企業應用程序中看到大量臭臭的IoC接線,但仍可以在需要時切換某些實施。 http://programmers.stackexchange.com/questions/133471/writing-testable-code-vs-avoiding-speculative-generality – 2015-12-14 11:57:38