[英]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.