MEF 加载和卸载特定插件
本文关键字:插件 卸载 加载 MEF | 更新日期: 2023-09-27 17:55:22
我是插件世界的新手,并强制取消 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 应用程序。如果您决定检查它们,我认为最好的方法是使用样本。
祝你好运