私は自分の問題に対する答えを見つけることができませんでした。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を使用している方法と何か関係がありますか?私はどんなアイデアにもオープンです。