我有一个简单的 MEF 从目录加载一些 dll(插件)的实现。这在 MEF1 下运行良好,但现在我想使用与 MEF2 相同的功能,它为我提供了一个 IEnumerable,其中包含目录中正确数量的 dll,但所有程序集都相同。
例如,我有两个程序集:目录中有 fakeplugin1.dll 和 fakeplugin2.dll。他们导出 FakePlugin1 和 FakePlugin2 类。现在,当我调用 container.ComposeParts() 时,列表中没有任何用 ImportMany 装饰的内容,而 container.Catalog 在目录中包含两个程序集,但它们都是 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 有什么变化吗?如何加载两个不同的程序集?:)
提前感谢您的帮助!
编辑: 它总是在文件夹中创建第一种类型的两个实例(在 abc 中升序)。如果我将另一个放在文件夹中,它会创建三个相同的,等等。
编辑:我已将代码上传到 pastebin,与 MEF2 给出相同的结果:http: //pastebin.com/3fWcujPS