2

みんな

問題は、同じエクスポート シグネチャを持つ 2 つのエクスポートされたコンポーネントが存在するが、インポートする必要があるのは 1 つだけである場合です (これは可能です。実際の例では、古いプラグインをアンインストールせずに新しいプラグインをインストールして、古いプラグインを置き換えます)。どのコンポーネントをインポートする必要があるかを示す構成ファイルを提供できますが、問題は MEF に正しい選択を伝える方法です。

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

  1. カスタム カタログを使用して、利用可能なプラグインをフィルタリングします。しかし、A がコンポーネント A をインポートし、B がコンポーネント B をインポートし、コンポーネント A と B が同じエクスポート署名を持っている状況を想定します。コンポーネントごとに新しいカスタム カタログを作成しない限り、カスタム カタログではこれを処理できません。

  2. MEF構成の傍受。それが可能かどうかはわかりませんし、方法もわかりません。しかし、合成プロセスでインターセプトできる方法があれば、これが最善の方法になる可能性があります。

  3. 実際のインターフェイスの代わりにインポート ラッパーを使用します。コンポーネントが構築されると、ラッパーが初期化され、ラッパーが選択ロジックを処理できるようになります (ウィンドウにプロンプ​​トを表示し、ユーザーに 1 つを選択させたり、構成を読み取らせたりするなど)。

4

1 に答える 1

2

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

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

于 2012-02-08T06:29:22.107 に答える