構成ファイル(シリアル化)で指定されているフォルダーからプラグインをロードできますか?
はい、MEFのDirectoryCatalogクラスを使用してフォルダからプラグインをロードできます。ただし、構成ファイルに独自のセクションを追加し、DirectoryCatalog
プラグインが配置されているフォルダーごとにを作成する必要があります。.NET 2.0構成の謎を解き明かすにSystem.Configuration
は、名前空間でクラスを使用する方法に関する優れた情報が含まれています。
プラグインをアンロードするにはどうすればよいですか?
これは、プラグインをアンロードするという意味によって異なります。
アセンブリがフォルダーから削除されたときにプラグインをアンロードするにはAllowRecomposition
、MEFのインポート属性のプロパティと各プラグインフォルダーのFileSystemWatcherを使用して、削除された.dllファイルを監視し、DirectoryCatalog.Refresh
メソッドを呼び出してMEFコンテナーを強制的に更新します。ただし、デフォルトでは、.NETによってロードされたアセンブリを削除できないことに注意してください。これを克服するために、.NETはシャドウコピーをサポートしています。グレンブロックによるMEFコードの方法を見てください。これPartUpdatesInPlace
を行う方法の良い例です。
ファイルシステムなしでプラグインをアンロードすることは別のことです。これは自分で行う必要があります。通常、プラグインを自由にアンロードできるプラグインマネージャーが必要になります。
ただし、ロードされたアセンブリはプラグインのみがアンロードされないことに注意してください。
min&maxバージョン間の特定のバージョンでプラグインをロードするにはどうすればよいですか?
MEFのメタデータのエクスポートを使用して、プラグインのメタデータを追加できます。次に、CompisitionContainerのGetExportsメソッドを使用して、実際のプラグインにアクセスする前にメタデータを確認します。これは、MEFベースのプラグインソリューションの標準的な手順です。より良いアプローチのためにMEF2で追加されたExportFactoryクラスも見てください。
カタログをラップして作成する方法(例:「MEFManager」など)
基本を提供する非常に単純なプラグインマネージャークラスから始めて(何をしたいかによって異なります)、これから構築します。
プラグインからフォームを表示するにはどうすればよいですか?
MEFなしで行うのと同じ方法でそれを行うことができます。たとえば、プラグインのインターフェイス/基本クラスにフォームプロパティを追加し、各プラグインにプラグインの作成/破棄を任せることができます。
Prism
これらすべてを開始する前に、 (複合アプリケーションガイダンス)とを確認することをお勧めしますSmart Client Software Factory
。これらは、優れた柔軟性を必要とするWPFおよびWinFormsアプリケーション用の強力なフレームワークです。それらをチェックすることにした場合、私は最良の方法はサンプルをいじることだと思います。
幸運を