1

UnityContainer でフォローする方法がわかりません。

interface A { }
interface B { }
interface X { }
class ConcreteAX : A, X { }
class ConcreteBX : B, X { }

ServiceLocator.ResolveAll<X>両方のインスタンスを返すように、両方の具象クラスを登録する必要があります。同じ時間Resolve<A>Resolve<B>、同様に機能するはずです。さらに、サービスの登録中に自分でインスタンス化してはいけません。

名前付き登録を使用して機能XさせるResolveAllと、各具象クラスの 2 つのインスタンスが作成されます。すべてのインターフェイスに名前付き登録を使用すると、機能Resolve<A>Resolve<B>ません。このアプローチを使用すると、ResolveAll何も返されません。

UnityContainer でトリックを行うには?

4

1 に答える 1

5

ExternallyControlledLifetimeManagerおよびを使用しInjectionFactoryて、デフォルトの登録を解決する2 番目の (名前付きの) 登録を行います。例えば:

unity.RegisterType<A, ConcreteAX>(new ContainerControlledLifetimeManager());
unity.RegisterType<B, ConcreteBX>(new ContainerControlledLifetimeManager());
unity.RegisterType<X, ConcreteAX>("AX", 
    new ExternallyControlledLifetimeManager(), 
    new InjectionFactory(u => u.Resolve<A>()));
unity.RegisterType<X, ConcreteBX>("BX", 
    new ExternallyControlledLifetimeManager(), 
    new InjectionFactory(u => u.Resolve<B>()));
于 2012-06-06T09:19:52.167 に答える