Unity容器:注册两个单例,实现两个接口,其中一个是常见的

Vas*_*iak 1 .net c# unity-container service-locator resolve

我无法弄清楚如何使用UnityContainer进行操作.

interface A { }
interface B { }
interface X { }
class ConcreteAX : A, X { }
class ConcreteBX : B, X { }
Run Code Online (Sandbox Code Playgroud)

我需要注册两个具体类,以便ServiceLocator.ResolveAll<X>返回两个实例.同一时间Resolve<A>,也Resolve<B>应该工作.而且,我必须在注册服务时自己实例化它们.

如果我使用命名注册X来创建ResolveAll工作,那么将创建每个具体类的两个实例.如果我用命名注册的所有接口,然后Resolve<A>Resolve<B>不起作用.如果我使用这种方法然后ResolveAll什么也不返回.

如何使用UnityContainer完成这个技巧?

cyn*_*nic 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>()));
Run Code Online (Sandbox Code Playgroud)