同一类型的多个实例

时间:2013-05-30 13:00:52

标签: c# dependency-injection inversion-of-control structuremap

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

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

1 个答案:

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