(簡体字)、高レベルのユニティ店舗解決するときに使用されている二つの情報から:心に留めておくべき
- 型マッピング
- ビルドプラン
キーポイントでありますそのタイプ・マッピングとターゲット・タイプの構築は、別個の離散ステップです。
タイプマッピングでは、「from」タイプと「to」タイプの間のマッピングが格納されます。したがって、サンプルコードIA
=>C
およびIB
=>C
です。
ビルドプランには、 "to"ターゲットタイプを構築するために必要なステップが含まれています。この場合、タイプはC
です。
ので
.RegisterType<IA, C>(new InjectionConstructor(1))
が呼び出されたときに型マッピングはC
にIA
から作成され、ターゲット・タイプC
に関連付けられたビルド計画戦略が作成され、メモリに保存されています。
.RegisterType<IB, C>(new InjectionConstructor(2));
は、タイプマッピングはC
へIB
から作成され、ビルド計画の戦略が関連付けられて呼び出されたときにビルドプランの戦略は、デフォルトの寿命マネージャと1
次の値を持つInjectionConstructor
が含まれますターゲットタイプC
がメモリ内で更新されます。これにより、InjectionConstructor(1)
の代わりにInjectionConstructor(2)
を使用するようにビルド計画の戦略が変更されます。
は今定義された2つの型マッピング(IA
= C
とIB
=>C
)が、C
ため、まだ一つだけのビルド計画があります。そのため、解決は1の代わりに2の値を返します(C
を直接解決し、X:container.Resolve<C>()
の値をチェックすることでこれを確認できます)。
同じターゲットタイプのビルドプランを複数作成する場合は、名前付き登録を使用できます。たとえば、fromインターフェース(または必要な他の文字列値)の名前を使用して登録することができます。
var container = new UnityContainer();
container
.RegisterType<IA, C>(typeof(IA).Name, new InjectionConstructor(1))
.RegisterType<IB, C>(typeof(IB).Name, new InjectionConstructor(2));
var a = container.Resolve<IA>(typeof(IA).Name);
a.X.ShouldBe(1); // will be 1