使用 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/