具有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正在做自己的工作,你虽然它会:)