1

我有一个类 ClassA 实现的接口 IInterfaceA。然后还有 3 个类从 ClassA 派生——ClassA1、ClassA2 和 ClassA3——它们都在单独的项目 DLL 中。

我现在有一个 Windows 服务(通过在控制台应用程序中使用 TopShelf 启动),它位于控制台应用程序的 Program 类的顶部:

[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 将正常工作,并且 importList 中将有一项。如果我将 JUST ClassA2.dll 或 JUST ClassA3.dll 放在目录目录中,也会发生同样的情况 - MEF 代码工作正常。

但是 - 如果我将多个 DLL 放入其中,例如 ClassA1.dll 和 ClassA2.dll - MEF 失败并且importsList 中没有项目。但它不会引发任何 MEF 错误/异常 - 它只是不起作用。

有人以前见过这个并且知道为什么吗?可能是因为基础 ClassA 类在其他项目的类型中是 MEF,而且那些 MEF 中的类型也是其他地方的类型中的 MEF - 即,MEF 的深度大约有 3 个级别!

谢谢

4

0 回答 0