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工作,则会创建每个具体类的两个实例。如果我对所有接口使用命名注册,那么Resolve<A>并且Resolve<B>不起作用。如果我使用这种方法,那么ResolveAll什么都不返回。

如何使用 UnityContainer 解决问题?

4

1 回答 1

5

使用ExternallyControlledLifetimeManagerInjectionFactory解析默认注册进行第二次(命名)注册。例如:

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 回答