gpt4 book ai didi

c# - 在 TinyIoC 中注入(inject)命名注册

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

我有一个接口(interface)IRofl,它有一个名为DefaultRofl 的实现,具有以下构造函数签名:

public DefaultRofl(ICanHasCheezburger cheez)

ICanHasCheezburger 有几个实现,我需要通过 IoC 容器解决不止一个,我认为命名注册是正确的方法。

假设我有两个预先创建的实例,希望其中一个作为默认注册,另一个命名为:

container.Register<ICanHasCheezburger>(cheez1);
container.Register<ICanHasCheezburger>(cheez2, "x2");

现在我需要为 DefaultRofl 指定,应该解析“x2”注册 - 这就是我遇到的问题。我知道 Autofac 可以做到这一点,但我找不到 TinyIoC 的方法。

我本来希望这样做的方式是

container.Register<IRofl, DefaultRofl>().UsingConstructor(() => new DefaultRofl(container.Resolve<ICanHasCheezburger>("x2")));

但事实证明(我什至有点理解为什么),ICanHasCheezburger 构造函数参数只是一个虚拟参数,并未实际计算。这意味着名称也将被忽略,并且接口(interface)的默认注册已解析 - 但这是 cheez1,我不想在这里使用它。

实际上,在另一个 Jeff Atwood 的橡皮鸭问题解决案例中,我只是想通了:

container.Register<IRofl>((c, p) => new DefaultRofl(container.Resolve<ICanHasCheezburger>("x2")));

成功了。但是,如果我有更多构造函数参数,我就必须明确说明所有 container.Resolve() 调用,对吗?史蒂文? ;-)

最佳答案

如果您使用命名注册,那么检索它们的唯一三种方法是使用您那里的 Resolve 重载(采用名称),手动使用 ResolveAll 或采用 IEnumerable 的依赖项,这将为您提供所有命名注册Foo 的。

关于c# - 在 TinyIoC 中注入(inject)命名注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12397730/

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