我對使用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還沒有足夠成熟以供認真使用?