MEF 加载和卸载特定插件

本文关键字:插件 卸载 加载 MEF | 更新日期: 2023-09-27 17:55:22

我是插件世界的新手,并强制取消 mef。目前我知道如何从特定文件夹加载插件。现在我有一些问题:

  • 我可以从配置文件中指定的文件夹加载插件吗(序列化)?
  • 如何卸载插件?
  • 如何在最小版本和最大版本之间加载特定版本的插件?
  • 我如何包装目录并撰写例如"MEF 管理器"之类的东西

可选:

  • 如何显示插件中的表单?

感谢您的帮助

MEF 加载和卸载特定插件

我可以从文件夹中指定的文件夹中加载插件吗 配置文件(序列化) ?

是的,您可以使用 MEF 的 DirectoryCatalog 类从文件夹中加载插件。不过,您必须在配置文件中添加自己的部分,并为插件所在的每个文件夹创建一个DirectoryCatalog。揭开 .NET 2.0 配置的奥秘包含有关如何使用 System.Configuration 命名空间中的类的重要信息。

如何卸载插件?

这取决于您卸载插件的意思。

  • 从文件夹中删除程序集时,可以使用 MEF 导入属性的 AllowRecomposition 属性和每个插件文件夹的 FileSystemWatcher 来完成卸载插件,以监视已删除.dll文件并调用 DirectoryCatalog.Refresh 方法来强制更新 MEF 容器。请注意,默认情况下不能删除由 .NET 加载的程序集。为了克服这一点,.NET 支持卷影复制。看看 Glenn Block 的 The Way of MEF code。PartUpdatesInPlace是有关如何执行此操作的一个很好的例子。

  • 在没有文件系统的情况下卸载插件是另一回事。你将不得不自己做这件事。通常,您需要一个可以随意卸载插件的插件管理器。

但请注意,加载的程序集不会仅卸载插件。

如何在最小值和最大值之间加载具有特定版本的插件 版本?

您可以使用 MEF 的导出元数据来添加插件元数据。然后,您使用CompisitionContainer的GetExports方法,并在访问实际插件之前检查元数据。这是基于 MEF 的插件解决方案的标准过程。另请查看 MEF2 中添加的 ExportFactory 类,以获得更好的方法。

我如何包装目录并撰写例如"MEF 经理"

从一个非常简单的插件管理器类开始,它提供了基础知识(取决于你想做什么),并从中构建。

如何显示插件中的表单?

您可以像不使用 MEF 一样执行此操作。例如,您可以将表单属性添加到插件接口/基类中,并使每个插件负责创建/处置它。

在您开始执行所有这些操作之前,我建议您检查Prism(复合应用程序指南)和Smart Client Software Factory。这些是功能强大的框架,适用于需要极大灵活性的 WPF 和 WinForms 应用程序。如果您决定检查它们,我认为最好的方法是使用样本。

祝你好运