3

使用 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容器为任何命名请求提供它。

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

4

1 回答 1

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 注册中传递的是类型而不是对象(将被视为单例)?

于 2013-12-27T21:33:57.723 回答