外部機器 (I/O デバイス、オシロスコープ、波形発生器など) へのプラグイン インターフェイスに MEF を使用するアプリケーションを開発しています。これらのインターフェイスのほとんどは、機器にアクセスするために DLL を必要とし、可能であれば、これらの DLL をプラグインを含むプロジェクトにパックします。
アプリケーションはImportMany
、プラグイン インターフェイスを実装するすべてのクラスをロードするために使用します。その後、ユーザーは必要なインターフェースを選択できます。
問題を引き起こしているインターフェイスが 1 つあります。すべての依存関係を特定できていません。別のワークステーションでアプリケーションを起動すると、未解決の依存関係エラーが発生します。すべてのドライバーとサポート DLL をインストールすると、問題なく動作するはずです。
ただし、すべてのユーザーがこの特定のインターフェイスを使用する必要があるわけではなく、すべてのワークステーションにすべてのドライバーをインストールしたくありません。一部の MEF プラグインをロードできない場合に適切に機能を低下させる方法を探しています。インターフェイスをロードできなかったことを通知するには、ログ メッセージで十分です。インターフェイス関数を使用しようとしている人だけがエラーを受け取るはずです。
ここに私のローダーコードがあります:
try
{
var catalog = new AggregateCatalog();
var container = new CompositionContainer(catalog);
var batch = new CompositionBatch();
batch.AddPart(this);
catalog.Catalogs.Add(new AssemblyCatalog(typeof (Pruef.Net.TgtManager.TargetManager).Assembly));
container.Compose(batch);
_targets = _targets.OrderBy(t => t.DisplayName);
}
catch (Exception x)
{
log.Error(x);
}