私は自分の問題に対する答えを見つけることができませんでした。MEFを使用してIPlugInを実装するクラスを見つけて作成していますが、最終的には各PlugInクラスの2つのバージョンになります。AggregateCatalogには、パーツとして各クラスの1つのタイプのみを含む1つのアセンブリのみが含まれていると判断しましたが、最終結果としてそれぞれ2つのインスタンスを取得しています。私はおそらく愚かなことをしているだけですが、まだそれを見つけていません。助けていただければ幸いです...
..。
[ImportMany(typeof(IPlugIn))]
publicSystem.Lazy>[]プラグイン{get; セットする; }
..。
//aggregatecatalogにはプラグインクラスを含むdllが1つだけ含まれています。そのうちの4つは
コンテナ=新しいCompositionContainer(aggregateCatalog、
CompositionOptions.DisableSilentRejection
| CompositionOptions.IsThreadSafe); \
container.SatisfyImportsOnce(this);
..。
public void StartAll()
{{
//ここに8つのプラグインがありますか?どのように?
if(Plugins == null || Plugins.Count()== 0)
{{
log.Warn( "開始できるプラグインがありません!");
戻る;
}
foreach(varプラグインプラグイン)
{{
log.Info( "プラグインの開始:" + plugin.Value.GetName());
plugin.Value.Start();
}
}
..。
[Export(typeof(IPlugIn))]
パブリッククラスMyPlugIn:BasePlugIn、IPlugIn
..。
VisualStudioでデバッグしています。アセンブリのロードが1つだけはっきりとわかります。CompositionContainerにはそれぞれ1つしかありません。StartAll()でSatisfyImportOnceを実行した後、各IPlugInクラスのインスタンスが2つあります。これは私がImportManyを使用している方法と何か関係がありますか?私はどんなアイデアにもオープンです。