gpt4 book ai didi

c# - 同一类型的多个实例

转载 作者:行者123 更新时间:2023-11-30 18:33:50 25 4
gpt4 key购买 nike

使用 StructureMap,假设我为给定接口(interface)配置了几个实例,由名称标识:

registry.For(interfaceType).Add(firstType).Named(firstName);
registry.For(interfaceType).Add(secondType).Named(secondName);
registry.For(interfaceType).Use(defaultType);

这很适合我的需要。但是,在某些应用程序场景中,我不得不覆盖一个实例以使用与另一个实例相同的具体类型。如此有效地进行这样的事情:

registry.For(interfaceType).Add(defaultType).Named(firstName);
registry.For(interfaceType).Add(defaultType).Named(secondName);
registry.For(interfaceType).Use(defaultType);

然而,在实践中,StructureMap 似乎不仅使用相同的类型,而且使用相同的实例。因此,内存中只有 一个 defaultType 实例,容器为任何命名请求提供该实例。

有没有办法告诉它构造和使用不同的实例,即使它们是相同的具体类型?

最佳答案

这不是我看到的行为:

ObjectFactory.Configure(cfg =>
{
cfg.For<IFoo>().Add<Foo>().Named("Foo1");
cfg.For<IFoo>().Add<Bar>().Named("Foo2");
cfg.For<IFoo>().Use<Foo>();
});

var foo1 = ObjectFactory.GetNamedInstance<IFoo>("Foo1");
var defaultFoo = ObjectFactory.GetInstance<IFoo>();

Debug.Assert(!Object.ReferenceEquals(foo1, defaultFoo));

此处命名实例和默认实例不同

您在 StructureMap 注册中传递的是类型而不是对象(这将被视为单例)?

关于c# - 同一类型的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16836929/

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