web-dev-qa-db-ja.com

RegisterType()呼び出しのInjectionMembersは何を要求しますか?

私はMicrosoftのUnity IOCコンテナを使用しています。RegisterType()メソッドにはたくさんのオーバーロードがあります。

IUnityContainer RegisterType(Type t, params InjectionMember[] injectionMembers);

injectionMembersパラメータはいつ使用するのか疑問に思いますか?それらのドキュメントは見つかりませんでした(すべてのオーバーロードにありますが)。私が調べたサンプルコードはどれもそれらを使用していません。

ここで何かが足りませんか?それらは一般的に使用されていませんか、それとも例を見逃しただけですか?

29
Scott Bussinger

Unityが指定されたタイプのインスタンスの作成方法を指示する構成ファイルを提供しない場合、または構成で定義されている以外の方法でインスタンスを作成する場合は、InjectionMember配列によるオーバーロードが使用されます。ファイル。

オーバーロードは、構成ファイルなしでUnityコンテナーを構成する場合に使用されます。 InjectionMemberは、コンストラクター、プロパティ、またはメソッド呼び出しにすることができます。

Unityヘルプから抜粋した次のコードは、コンテナーの流暢なインターフェースを介してInjectionMembersを使用する方法を示しています。

IUnityContainer myContainer = new UnityContainer();
myContainer.Configure<InjectedMembers>()
  .ConfigureInjectionFor<MyObject>( 
    new InjectionConstructor(12, "Hello Unity!"), 
    new InjectionProperty("MyStringProperty", "SomeText"));

次のXML構成は、上記のコードと同等です。

<type type="MyObject" mapTo="MyObject" name="MyObject">
  <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration"> 
    <constructor> 
      <param name="someInt" parameterType="int"> 
        <value value="12"/>
      </param> 
      <param name="someText" parameterType="string">
        <value value="Hello Unity!"/>
      </param> 
    </constructor> 
    <property name="MyStringProperty" propertyType="string">
      <value value="SomeText"/>
    </property>
  </typeConfig> 
</type>
28
Jehof

また、各オーバーロードで表示されますが、必須ではないことにも注意してください。

これは、InjectionMemeberが配列型であり、最後のパラメーターであるために機能すると思います。したがって、0個以上のコンマ区切り値を指定でき、配列は自動的にアセンブルされます...

0
Mike Graham