1

我正在开发一个新的插件加载器应用程序框架并阅读所有可用的 MEF 变体,我认为最具前瞻性和灵活性的是 NuGet 提供的 MEF2 实现,如System.Composition.

不幸的是,大多数(如果不是全部)在线教程都是为 MEF1 编写的,即System.ComponentModel.Composition使用AssemblyCatalog从例如在目录中显式查找 DLL 并将其传递给 MEF 创建的CompositionContainer

MEF2 没有这个对象,因此我仍然不清楚 MEF2 在哪里找到它的组件。它们不能在运行时定位吗(这意味着需要添加每个插件作为对加载插件的应用程序的引用)?这会让我觉得很奇怪。

任何人都可以阐明如何指定将从哪里加载哪些程序集(以及我应该如何设置它)System.Composition?我了解 MEF2 的设计考虑了 PCL(我正在编写桌面应用程序),但如果只需为未来的便携性支付很小的设置成本,我完全赞成。如果没有,我会屈服于使用System.ComponentModel.Composition我能弄清楚的。

4

1 回答 1

1

目录被 ContainerConfiguration 替换:

        var conf = new System.Composition.Hosting.ContainerConfiguration();
        conf.WithAssembly(Assembly.GetExecutingAssembly());
        var container = conf.CreateContainer();

        var hwWriter = new HelloWorldWriter();
        container.SatisfyImports(hwWriter);

        Console.WriteLine(hwWriter.Write);
        Console.ReadLine();

您将在其中ContainerConfiguration找到更多With...替换 MEF1 中所有不同目录的方法。

于 2016-04-13T23:03:47.180 回答