Dot-Net
Unity.Resolve 如何知道使用哪個建構子?
給定一個具有多個建構子的類 - 我如何告訴 Resolve 使用哪個建構子?
考慮以下範例類:
public class Foo { public Foo() { } public Foo(IBar bar) { Bar = bar; } public Foo(string name, IBar bar) { Bar = bar; Name = name; } public IBar Bar { get; set; } public string Name { get; set; } }如果我想使用 Resolve 創建一個 Foo 類型的對象,Resolve 如何知道要使用哪個建構子?我怎麼能告訴它使用正確的呢?假設我有一個註冊了 IBar 的容器 - 它會理解它應該支持使用 IBar 的建構子嗎?如果我也指定一個字元串 - 它會使用
(string, IBar)建構子嗎?Foo foo = unityContainer.Resolve<Foo>();請忽略這樣一個事實,即如果該類只有一個建構子可能會更容易……
當一個目標類包含多個建構子時,Unity 將使用應用了 InjectionConstructor 屬性的那個。如果有多個建構子,並且沒有一個帶有 InjectionConstructor 屬性,Unity 將使用參數最多的建構子。如果有多個這樣的建構子(多個參數相同的“最長”建構子),Unity 將引發異常。
取自連結文本