簡體   English   中英

同一類型的多個實例

[英]Multiple Instances of the Same Type

使用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實例,容器為任何命名請求提供。

有沒有辦法告訴它構建和使用單獨的實例,即使它們是相同的具體類型?

這不是我所看到的行為:

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注冊中傳遞的是類型而不是對象(將被視為單例)?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM