具有StructureMap 4和NestedContainer的IDisposable Singleton

问题描述:

我期待注册一个EasyNetQ的IBus,它使用StructureMap实现了IDisposable作为单例。
问题是,当使用嵌套容器时,实例与容器一起处理,因此让我为每个其他容器处理一个单例实例。具有StructureMap 4和NestedContainer的IDisposable Singleton

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

ContainerScoped是不是一个不错的选择,因为我需要所有的应用程序生命周期过程中保持活动状态。

如何防止StructureMap将此实例与嵌套容器一起处理?我如何告诉它只使用根容器来处理实例?

我知道我的问题有些奇怪。定义单身人士是否与每个集装箱一起处理都有什么意义?

事实上,除非根容器被布置StructureMap不配置单一对象,看the PipelineGrap.cs source code.

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

原来我IBus实例是通过某种神秘的遗留代码,它是被手动配置注射。

总之,对任何人面临着同样的问题:你的电话追踪到Dispose如StructureMap正在做自己的工作,你虽然它会:)