Dot-Net

Unity.Resolve 如何知道使用哪個建構子?

  • March 18, 2010

給定一個具有多個建構子的類 - 我如何告訴 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 將引發異常。

取自連結文本

引用自:https://stackoverflow.com/questions/2470102