2009-06-04 37 views
0

假設我有兩種類型,TypeA和TypeB,我想在Unity中註冊。 TypeB依賴於TypeA,所以我想通過構造器注入將TypeA注入到B類型中。所以我想寫點東西像下面並有統一足夠聰明,級聯的分辨率對我來說:Unity中級聯分辨率

_container.RegisterType<ITypeA, TypeA>(); 
_container.RegisterType<ITypeB, TypeB>(); 

我怎麼能告訴統一解決類型A和注入的TypeB?

它看起來像如果使用配置文件,這是可能的,但我不知道你會怎麼做programmaticaly:

<type name="typeB" type="ITypeB" mapTo="TypeB"> 
    <lifetime type="Singleton"/> 
    <typeConfig extensionType="..."> 
     <constructor> 
     <param name="typeA" parameterType="ITypeA"> 
      <dependency/> 
     </param> 
     </constructor> 
    </typeConfig> 
</type> 

在此先感謝您的任何建議!


編輯:所以,Unity不會爲我處理這個。不過,我覺得我的問題是,我有兩個構造函數的類:

public TypeB(TypeA typeA) 
{ 
    _x = typeA; 
} 

public TypeB() : this(Something.Value) 
{ 
} 

看來,統一是有問題的瞭解需要使用的構造函數。第一個構造函數用於單元測試,第二個構造函數應該在運行時使用。 Unity對此有困難。

回答

1

你不喜歡這樣:

class TypeA 
{ 
} 

class TypeB 
{ 

    [InjectionConstructor] 
    public TypeB([Dependency] TypeA typeOfA) 
    { 

    } 
}