使用StructureMap,我想说我为给定的接口配置了几个实例,由名称标识:
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
,容器为任何命名请求提供。
有没有办法告诉它构建和使用单独的实例,即使它们是相同的具体类型?
答案 0 :(得分:0)
这不是我所看到的行为:
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注册中传递的是类型而不是对象(将被视为单例)?