gpt4 book ai didi

c# - 统一容器 : Register two singletones which implement two interfaces one of which is common

转载 作者:太空宇宙 更新时间:2023-11-03 20:25:24 25 4
gpt4 key购买 nike

我不知道如何使用 UnityContainer 进行跟随。

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

我需要注册两个具体类,以便 ServiceLocator.ResolveAll<X>应该返回两个实例。同时Resolve<A>Resolve<B>也应该工作。此外,我不能在注册服务时自己实例化它们。

如果我对 X 使用命名注册制作ResolveAll工作,然后创建每个具体类的两个实例。如果我对所有接口(interface)使用命名注册,那么 Resolve<A>Resolve<B>不起作用。如果我使用 this然后接近ResolveAll什么都不返回。

如何使用 UnityContainer 来解决这个问题?

最佳答案

使用 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>()));

关于c# - 统一容器 : Register two singletones which implement two interfaces one of which is common,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10910237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com