Unity 容器:注册两个单调,实现两个接口,其中一个是通用的
本文关键字:两个 一个 容器 单调 Unity 接口 实现 注册 | 更新日期: 2023-09-27 18:36:25
我不知道如何使用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?
使用解析默认注册的ExternallyControlledLifetimeManager
和InjectionFactory
执行第二次(命名)注册。例如:
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>()));