gpt4 book ai didi

.net - StructureMap 和注入(inject) IEnumerable

转载 作者:行者123 更新时间:2023-12-04 12:00:16 25 4
gpt4 key购买 nike

我是 StructureMap 的新手,并且有一些我正在使用的现有代码使用 StructureMap 2.5.4。

有一个使用 StructureMap 构造的类,它的构造函数采用 IEnumerable<ICar>作为参数。

注册表有以下代码。

Scan(x =>
{
x.TheCallingAssembly();
x.WithDefaultConventions();
x.AddAllTypesOf<ICar>();
}
);

ForRequestedType<IEnumerable<ICar>>().TheDefault.Is.ConstructedBy(
x => ObjectFactory.GetAllInstances<ICar>());

我正在编写一个单元测试,并从 ObjectFactory 获得了一个嵌套容器,并使用 Inject 方法注入(inject)了一个实例。 ICar 的实例之一应该在其构造函数中接收注入(inject)的类型。但是它不起作用,我将其追踪到不使用我的嵌套容器的 ObjectFactory.GetAllInstances() 调用。

我怎样才能让它工作?

我还阅读了有关 StructureMap Autowiring 数组和 IEnumerable 实例的信息,但我无法让它工作。

有没有更好的方法来重写上面的注册表代码,以便 IEnumerable<ICar> 的实例将被创建并使用我的嵌套容器中的注入(inject)类型?

最佳答案

如果要将实例注入(inject)嵌套容器,则需要从嵌套容器中检索该实例。静态 ObjectFactory 有自己的容器,在您的情况下可能是“父”容器。父容器不从嵌套容器继承实例。

您无需进行任何特定注册即可将所有实例注入(inject)到接受 IEnumerable 的类中。在它的构造函数中。 StructureMap 将自动执行此操作。如果您在容器中注册了 3 个 ICar 实例,并从该容器请求 Foo 实例,其中 Foo 具有 IEnumerable<ICar>构造函数参数,Foo 将使用注入(inject)的 3 个 ICar 实例创建。

关于.net - StructureMap 和注入(inject) IEnumerable<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4665440/

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