2017-07-07 58 views
0

我期待註冊一個EasyNetQ的IBus,它使用StructureMap實現了IDisposable作爲單例。
問題是,當使用嵌套容器時,實例與容器一起處理,因此讓我爲每個其他容器處理一個單例實例。具有StructureMap 4和NestedContainer的IDisposable Singleton

For<IBus>() 
    .Use(c => BusBuilder.CreateMessageBus()) 
    .Singleton(); 

ContainerScoped是不是一個不錯的選擇,因爲我需要所有的應用程序生命週期過程中保持活動狀態。

如何防止StructureMap將此實例與嵌套容器一起處理?我如何告訴它只使用根容器來處理實例?

回答

0

我知道我的問題有些奇怪。定義單身人士是否與每個集裝箱一起處理都有什麼意義?

事實上,除非根容器被佈置StructureMap不配置單一對象,看the PipelineGrap.cs source code.

if (Role == ContainerRole.Root) 
{ 
    _profiles.AllProfiles().Each(x => x.Dispose()); 
} 

原來我IBus實例是通過某種神祕的遺留代碼,它是被手動配置注射。

總之,對任何人面臨着同樣的問題:你的電話追蹤到Dispose如StructureMap正在做自己的工作,你雖然它會:)