ディレクトリからいくつかのdll(プラグイン)をロードするMEFの簡単な実装がありました。これは MEF1 でうまく動作していましたが、同じ機能を MEF2 で使用したいと思います。これにより、ディレクトリ内にあるがすべてのアセンブリが同じ dll の正しい数を含む IEnumerable が得られます。
たとえば、ディレクトリに fakeplugin1.dll と fakeplugin2.dll という 2 つのアセンブリがあります。FakePlugin1 および FakePlugin2 クラスをエクスポートします。今、container.ComposeParts() を呼び出すと、ImportMany で装飾されたリストには何もありません。container.Catalog にはディレクトリに 2 つのアセンブリが含まれていますが、どちらも FakePlugin1 です。
コードは次のとおりです。
[ImportMany(typeof (IDCPlugin))]
IEnumerable<IDCPlugin> workplaceControllers;
var catalog = new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory);
var agcatalogue = new AggregateCatalog(catalog);
var container = new CompositionContainer(agcatalogue);
container.ComposeParts();
ExportFactory と RegistrationBuilder を使用しようとしていますが、基本機能でさえ期待どおりに機能しないことに気付きました。
私は何を間違っていますか?MEF2 で何か変更がありましたか? 2 つの異なるアセンブリを読み込む方法は? :)
事前にご協力いただきありがとうございます。
編集: フォルダー内に最初のタイプの2つのインスタンスを常に作成します(abcで昇順)。フォルダーに別のものを入れると、同じものが3つ作成されます。
編集: MEF2 で同じ結果が得られるコードをペーストビンにアップロードしました: http://pastebin.com/3fWcujPS