gpt4 book ai didi

unity-container - 统一: registering a decorator in a child container

转载 作者:行者123 更新时间:2023-12-01 11:57:29 25 4
gpt4 key购买 nike

我有以下场景:

在基础容器中,我正在注册一个类型。

container.RegisterType<IFoo,Foo>();

在子容器中,我想注册一个装饰器,它包装基础容器使用的任何内容。所以如果我有这个类:

public class FooDecorator: IFoo
{
public FooDecorator(IFoo foo) {}
}

我要注册:

childContainer.RegisterType<IFoo,FooDecorator>();

在我看来,当子容器在 FooDecorator 构造函数中解析 IFoo 时,它会尝试解析父容器的 IFoo。但事实并非如此。它尝试再次解析 FooDecorator,因此一次又一次,直到引发 StackOverflow 异常。

我知道这可以通过在子容器注册中指定一个 InjectionConstructor 来解决,如下所示:

childContainer.RegisterType<IFoo,FooDecorator>(
new InjectionConstructor(new ResolvedParameter<Foo>()));

但这看起来很脆弱。如果有人想将基础容器中 IFoo 的实际实例从 Foo 更改为其他内容,他还必须修改所有子容器。

所以我错过了什么吗?是否有更好的解决方案?

最佳答案

您可以使用命名映射:

parentContainer.RegisterType<IFoo, Foo>("decorated");

childContainer.RegisterType<IFoo, FooDecorator>(
new InjectionConstructor(new ResolvedParameter<IFoo>("decorated")));

这样装饰器的注册取决于接口(interface) IFoo 的命名映射“decorated”。

关于unity-container - 统一: registering a decorator in a child container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5612134/

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