我正在使用“每个请求的嵌套容器”模式。它包含在一个使用块中,因此嵌套容器在处理请求后被释放。这会导致嵌套容器创建的所有实例也在请求结束时处理。
这很有效,通常正是我想要发生的事情。但是我遇到了一个用例,在这个用例中我不希望处理一个特定的实例,而其他一切都是。
我尝试显式删除using块底部的实例,如下所示:
using (var nestedContainer = _container.GetNestedContainer())
{
nestedContainer.Configure ( x =>
x.For<IFoo>()
.Use(getFooForRequest())
);
var handler = (IRequestHandler) nestedContainer.GetInstance(handlerType);
handler.execute(....)
nestedContainer.EjectAllInstancesOf<IFoo>();
}
不幸的是,似乎EjectAllInstancesOf也在调用dispose。
我的应用程序有几个不同的IFoo实例,它们都需要在应用程序的整个生命周期中存在。但是,传入的请求需要与IFoo的一个特定实例动态关联。
如上所述将它注入嵌套容器中实现了这个目标,但是我的IFoo正在处理嵌套容器,这很糟糕。
那么如何阻止IFoo的处置,同时还要让它处理其他所有内容?
如果那是不可能的,还有其他方法可以通过nested.Configure()手动注入来动态选择我的每个请求的IFoo吗?