(他のMEF / MAFの質問については知っていますが、これはより具体的な問題です)
基本的に単純なアドインホスト、GUI、および設定であるWPFアプリケーションを作成したいと思います。実際の作業はすべて、1つ以上のプラグインによって行われます。それらは相互に通信する必要はなく、メインアプリケーションはユーザー入力/コマンドをそれらに送信し、いくつかの結果(たとえば、レンダリングするWPF UI要素)を返します。
さて、アプリケーションのコアはプラグインに基づいているので、それらを管理するための良い方法を選ぶ必要があります。実行時に(たとえば、更新が見つかってダウンロードされたときに)それらをロード/アンロード/リロードできるようにしたい。安定性と安全性のために、おそらく独自のアプリケーションドメインやプロセスで実行する必要があります。
いくつかの調査と実験から、私は3つの選択肢にたどり着きました。
System.Addin(MAF):これで必要なことはすべてできるようです。互換性などのために複数のバージョンのAPIを同時に実行できるパイプラインがあります。しかし、何かが足りない場合を除いて、APIを数回作成する必要があります。ホストビューとプラグインビュー、コントラクト、およびコントラクト用の2つのアダプターです。また、(MEFと比較して)情報やリソースはほとんどなく、ほとんどの記事は数年前のものです。これがゆっくりと死んでいくのではないかと心配しており、新しいプロジェクトには使用したくないと思います。
MEF:これはもっとシンプルに見えますが、私がコントロールできない魔法がたくさんあり、MAFほどレイヤーが分離されていないようにも感じます。新しいプロジェクトにリンクし、インターフェースを実装すればプラグインが完成する小さなライブラリが欲しいだけです。
手動ロード:最後のオプションは、フォルダーで.dllを手動でスキャンし、リフレクションを使用してプラグインクラスを検索し、インスタンスを作成することです。それは実行可能ですが、アセンブリを手動でロードしたり、個別のプロセス/アプリドメインを作成したりするよりも、何らかのフレームワークを使用したいと思います。
それで、この種のアプリケーションに最適なのはどれですか、それとも私が見逃したものはありますか?