如何指定要使用系统组合 (MEF2) 加载的 DLL

本文关键字:MEF2 加载 DLL 组合 何指定 系统 | 更新日期: 2023-09-27 18:31:50

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

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

。MEF2

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

谁能阐明如何在System.Composition中指定将从何处加载哪些程序集(以及我应该如何设置它)?我知道 MEF2 在设计时考虑了 PCL(我正在编写桌面应用程序),但如果只有很小的设置价格来支付这种未来的可移植性,我完全赞成。如果没有,我会屈服于使用我能弄清楚的System.ComponentModel.Composition

如何指定要使用系统组合 (MEF2) 加载的 DLL

目录由 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中的所有不同目录。