私は現在MEFと協力していて、いくつかの問題に直面しています
私が欲しいのは、ディレクトリからdllをロードすることです。
まず、ディレクトリをスキャンして、2つのものを辞書に保存します
それぞれのDLLからの名前プロパティ(文字列として)
およびモジュール名(文字列として)
これがScanDirectory()コードです
private void ScanPluginDirectory()
{
catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog(@"..\..\plugin"));
container = new CompositionContainer(catalog);
batch = new CompositionBatch();
batch.AddPart(this);
container.Compose(batch);
pluginDictionary = new Dictionary<String, String>();
foreach (IFilter filter in filters)
{
Type t = filter.GetType();
pluginDictionary.Add(filter.Name, t.Module.Name);
}
}
チェックボックスリストに名前を表示します。チェックボックスからdllを選択すると。
私は次のようにインポートステートメントを持っています
[Import]
public IEnumerable<IFilter> filters { get; set; }
現在、私のプログラムは正常に実行されています。チェックボックスリストからプラグインをチェックしたときです。それを「loaded」ディレクトリに移動し、QueryPlugin()メソッドが「loaded」ディレクトリを調べてプラグインを検索します。
チェックボックスリストからプラグインのチェックを外すと。「ロードされた」ディレクトリから移動します...
私が欲しいのは、batch.RemovePart()メソッドを使用して、あるディレクトリから別のディレクトリへのdllのこの急速な移動を取り除くことです。
注:プラグインを手動でバッチに追加していません
batch.AddPart(new DemoFilter1());
これの代わりに、DirectoryCatalog();;を使用しました。