我对使用MEF控制组成范围的方法很感兴趣。如何明确和精确地控制组合范围?
最明显的例子 - 网络应用程序,您必须为每个请求创建组件的某个子集,并在请求完成时处理它们。 但是,范围范围的一般实现也可能在其他情况下有用。
我正在查看MEF2预览并试图理解它,但由于某些原因没有看到完整的解决方案。
一方面,有这个MVC integration module,其中MEF足够好照顾请求范围对我来说,但这不是非常有用的MVC外(和网络外的事情),是吗?另一方面,在第一篇与预览有关的文章“What's new in MEF2”中,我看到了这个名为CompositionScopeDefinition
的东西,看起来像是作用域的明确规范,但是对于那个,我看不到一种方法“关闭”范围。换句话说:MEF如何确定何时处置在范围内创建的组件?
另一方面(yep :-),在MEF v1中,我曾经通过创建嵌套CompositionContainer
来处理范围限制,但是这对定制ExportProvider
s不起作用。
什么真的想看到的是一样的东西:
using(var scope = compositionContainer.OpenScope(/* some scope definition here */))
{
var rootComponent = scope.GetExport<MyRootComponent>(); // The component graph gets composed at this point
rootComponent.DoYourScopedThing();
} // The component graph gets disposed at this point
如果我有这样的事情,我可以很容易地建立在它之上的MVC整合,但我也可以使用它在其他情况下。
所以,再次提问:你用什么来处理这样的范围问题?或者你认为MEF还没有足够成熟以供认真使用?