2009-06-04 14 views
0

Unityに登録したいTypeAとTypeBという2つのタイプがあるとします。 TypeBはTypeAに依存するので、コンストラクタインジェクションを介してTypeAをType Bに注入したいのです。だから私は、次のとUnityが私のために解像度をカスケード接続するのに十分なスマートに持っているようなものを書きたいと思います:ユニティのカスケード解決

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

は、どのように私はタイプAを解決し、タイプBに注入するためにUnityに伝えることができますか?

これが可能であるように設定ファイルを使用している場合に見えますが、私はあなたが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が私のためにこれを処理します。しかし、私は私の問題は、私は2つのコンストラクタを持つクラスを持っているということだと思う:

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

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

それはUnityが使用するコンストラクタ知ってトラブルを抱えているようです。最初のコンストラクタはユニットテスト用で、2番目のコンストラクタは実行時に使用する必要があります。 Unityはこれに問題があります。

答えて

1

あなたはこのようにそれを実行します。

class TypeA 
{ 
} 

class TypeB 
{ 

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

    } 
} 
関連する問題