2011-12-15 10 views
2

MEFでコンポジションスコープを制御する方法に興味があります。組成スコープを明示的かつ正確に制御する方法は?

最も明白な例 - Webアプリケーション。要求ごとにコンポーネントの特定のサブセットを作成し、要求が完了したら処分する必要があります。 しかし、スコープの一般的な実装は、他のコンテキストでも有効です。

私はMEF2プレビューを見て、それを理解しようとしていますが、何らかの理由で完全な解決策が見られません。

一方で、このMVC integration moduleがあります.MEFは私の要求範囲を十分に処理するのにはいいですが、それはMVCの外ではあまり使用できません。

一方、最初のプレビュー関連の投稿「What's new in MEF2」では、CompositionScopeDefinitionというスコープの明示的な仕様のようなものを見たことがありますが、それでスコープを "閉じる"。言い換えると、MEFはスコープ内で作成されたコンポーネントをいつ廃棄するかをどのように決定するのですか?

MEF v1を使って3番目の手(yep :-)にネストされたCompositionContainerを作成してスコープ処理を行っていましたが、カスタムExportProviderでうまく動作しません。私はその事を持っていた場合、私は簡単にそれの上にMVCの統合を構築することができますが、私はまた、他のコンテキストでそれを使用することができ

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 

:本当に見たいのですがどのような

のようなものです。

もう一度疑問があります。そのようなスコープの問題に対処するにはどうすればよいですか?あるいは、MEFがまだ十分に成熟していないと言っていますか?

答えて

3

ご質問ありがとうございます。CompositionScopeDefinitionについてのご質問にお答えするドキュメントがあります。短縮版; CSDはExportFactory<T>で使用され、CreateExport()はスコープの有効期間を制御するためのハンドルを返します。

ただし、CSDはデスクトップアプリケーションのシナリオ用に設計されています。 MVC統合では、フィルタリングされたカタログとネストされたコンテナを使用してライフタイムを制御します。これは、Webやその他の作業処理シナリオでの 'トランザクション型'ライフタイムの推奨手法です。

このアプローチでは、カスタムExportProviderを使用して直面している問題について詳しく知っておくとよいでしょう。

生涯にわたる「カスタム」ストーリーは、私たちが非常に多く取り組んでいることです。 MEF 2が、特にCodePlexディスカッションフォーラムを通じて、あなたのシナリオのために不足している場所を知ることは、大きな助けとなります。

0

私はこの記事でCSDの詳細を検索しています。 MEFを使用して、クライアントが単一ウィンドウ内で画面の後に画面を開くことを可能にする画面ナビゲーションを持つ、拡張可能なWPFアプリケーションを作成したいと考えています。 各画面は、前の画面で設定した部品にアクセスできる必要があります。また、一部の部品を無効にすることもできます。 たとえば、ユーザーがProcessViewを開くと、ProcessViewからナビゲートされた画面でインポートできるProcessProviderの部分があるはずです(ActivityViewとしましょう)。 ActivityViewは、ProcessProviderへのアクセス権を持っている必要があります。

もう1つの例は、ルート画面にデフォルトでデータベース内のすべてのプロセスを返すProcessListProviderがあることです。 ProcessListViewを開く画面では、ProcessListViewがカスタマイズされたProcessListProviderを使用して変更される必要があります。

私は自分の要件を伝えることができたと思います。

Ido。

関連する問題