0

私はPrismとMEFExtensionsを使用していますが、インターフェイスへのインポートに関してプロジェクトのセットアップで問題が発生しています。問題は、インターフェースが具体的な実装と同じアセンブリに存在しないことです(他のプロジェクトにも同じインターフェースを使用する他の具体的な実装があるため)。

したがって、インターフェイスを使用したプロジェクトへの参照しかなく、具体的な実装がメインアプリで直接参照されることはないため、binディレクトリに含まれることはありません。したがって、実行時にMEF構成は、実装を含むアセンブリがないクラスを注入しようとするために失敗します。

これを行う正しい方法は何ですか?いつでもbindirにコピーできますが、それはダメです...またはプラグインディレクトリにコピーできますが、他の具体的な実装は同じプラグインディレクトリに存在する必要があるため、それもダメです。

私は何かを完全に見逃しているか、これはMEFの良い使用法ではないか、または...?

4

1 に答える 1

1

通常、MEF 実装モジュールはメイン プロジェクトによって参照されません。MEF の要点は、実行時にさまざまなものをロードできるようにすることです。

VS のメイン プロジェクトにビルド後のアクションを作成して、メイン プロジェクトが MEF モジュールを見つけると想定している場所 (bin または bin のサブディレクトリ) に MEF モジュールをコピーします。

代わりに、各 MEF モジュール プロジェクトのビルド出力ディレクトリを変更して、モジュール バイナリをメイン プロジェクトの bin ディレクトリまたは bin のサブディレクトリに出力することができます。

私は Prism には詳しくありませんが、.NET 4.0 を使用した単純な古い MEF を使用して、通常はメイン プロジェクトの構成ファイルにある情報から、MEF モジュール ファイル パスの MEF カタログを作成します。(ディレクトリで見つかったすべての dll をロードすると、トラブルが発生します)

メイン プロジェクトは MEF モジュールを参照しませんが、メイン プロジェクトのプロジェクト依存関係に MEF モジュールを追加することで、メイン プロジェクトをビルドするときに VS に MEF モジュールをビルドさせることができます。すべての MEF モジュール プロジェクトがメイン プロジェクトと同じソリューションに含まれていることを確認します。ソリューション エクスプローラーでメイン プロジェクトを右クリックし、[プロジェクトの依存関係] を選択して、すべての MEF モジュールの横にチェック マークを付けます。また、これにより、MEF モジュールが変更されたときにメイン プロジェクトが再コンパイルされます。これは厳密には必要ではありませんが、インターフェイスをどこかで変更した場合には良い考えです。

于 2012-11-09T17:51:10.267 に答える