クラス ClassA が実装するインターフェイス IInterfaceA があります。次に、ClassA からさらに 3 つのクラス (ClassA1、ClassA2、および ClassA3) が派生します。これらはすべて別のプロジェクト DLL にあります。
これで、コンソール アプリの Program クラスの先頭にある Windows サービス (コンソール アプリで TopShelf を使用して起動) ができました。
[ImportMany]
public List<IInterfaceA> importsList { get; set; }
そして、Main 関数で作成された Program のインスタンスから呼び出される関数では、次のことを行います。
var path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
var catalog = new DirectoryCatalog(path);
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
たとえば、ClassA1.dll をカタログ ディレクトリに配置すると、ComposeParts は正常に動作し、importsList に 1 つの項目が作成されます。JUST ClassA2.dll または JUST ClassA3.dll をカタログ ディレクトリに配置すると、同じことが起こります。MEF コードは正常に動作します。
しかし、ClassA1.dll と ClassA2.dll のように複数の DLL を入れると、MEF は失敗し、importsList に項目がありません。ただし、MEFエラー/例外はスローされません-機能しません。
これを以前に見たことがあり、その理由を知っている人はいますか? これは、基本 ClassA クラスが他のプロジェクトの型で MEF されており、型で MEF されたものが他の場所の型で MEF されているためである可能性があります。つまり、約 3 レベルの深さの MEF が行われています!
ありがとう