傍受

2012-02-08 32 views
2

みんな傍受

同じ輸出の署名を持っていますが、一方だけが(これが可能である輸入しなければならない2つのエクスポートコンポーネントが存在する場合の問題は、実用的な例では、交換するために新しいプラグインをインストールされています古いものをアンインストールせずに古いもの)。インポートするコンポーネントを指定するための設定ファイルを提供することができますが、MEFに正しい選択をどのように伝えるのかという疑問があります。

私は三つの方法があります:

  1. 利用可能なプラグインをフィルタリングし、カスタムカタログを使用します。しかし、コンポーネントAとBが同じエクスポート・シグニチャーを持つときに、コンポーネントAとBをインポートすると、コンポーネントBをインポートする状況を想定します。カスタムカタログは、各コンポーネントの新しいカスタムカタログを作成する以外はこれを処理できません。

  2. MEF組成物中の遮断。私はそれが可能であるかどうかわからないし、どのようにわからない。しかし、もし私たちが作曲過程で傍受させる方法があれば、これは最高のものかもしれません。

  3. 実インターフェイスの代わりにインポートラッパーを使用します。コンポーネントが構築されると、それは、ラッパーを初期化し、ラッパーが選択論理処理(例えば、プロンプトウィンドウのように、ユーザがいずれかを選択または構成を読み取るせ)ようになる

答えて

2

もの[ImportMany]の使用について同じ署名のすべての可能なインポートを取得し、このインポートのリストから特定の条件(設定ファイルなど)に必要なものを選択しますか?

EDIT:あなたの提案番号3が好きですが、これは簡単にできると思います。あなたのラッパーは[ImportMany]と実際のインターフェースを処理し、プラグインはあなたのラッパーにGetTheOneInterface()を要求します。

+0

ええ、[ImportMany]は解決できますが、これによってすべてのコンポジションコンポーネントがプラグイン選択ロジック自体を処理するようになります。私はこれを避けようとしています。 –

+0

http://stackoverflow.com/questions/7750640/intercepting-dependencies-in-mefを参照してください。これは、ExportProviderがリンクの方法2 –

+0

thxに適合する可能性があります。あなたの作品がうまくいけば、答えとしてここに投稿してください。 – blindmeis

関連する問題