c# - MEF 加载和卸载特定插件?

标签 c# winforms plugins mef

<分区>

我是插件世界的新手,我不得不去理解 mef。 目前我知道如何从特定文件夹加载插件。 现在我有一些问题:

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

可选:

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

感谢帮助

最佳答案

Can i load plugins from a folder which are specify in a configuarations file (Serialization) ?

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

How i can unload plugins ?

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

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

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

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

How can i load plugins with a specific version between min&max version?

您可以使用 MEF 的 Export Metadata添加插件元数据。然后你GetExports CompisitionContainer 的方法并在访问实际插件之前检查元数据。这是基于 MEF 的插件解决方案的标准程序。也看看 ExportFactory为了更好的方法而在 MEF2 中添加的类。

How i can wrap the catalog & compose e.g. as something like "MEF Manager"

从一个非常简单的插件管理器类开始,该类提供基础知识(取决于您想要做什么)并以此为基础进行构建。

How i can display forms from plugin?

您可以采用与没有 MEF 时相同的方式进行操作。例如,您可以将表单属性添加到您的插件接口(interface)/基类,并让每个插件负责创建/处置它。

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

祝你好运

关于c# - MEF 加载和卸载特定插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14467124/

相关文章:

c# - 有没有一种方法可以在 TreeView.Nodes 集合中搜索 TreeNode.Text 字段?

c# - 将项目从一个列表框移动到另一个

gradle - SLF4J : multiple SLF4J bindings with Gradle Plugin

c# - 使用自己的 app.config 的插件

c# - 如何用另一个数据表更新一个数据表?

javascript - 使用 Knockout.js 发布集合

c# - 将 XmlNodeList 转换为 List<string>

c# - 从 UI 线程强制 GUI 更新

c# - 在 .Net 中实现的插件接口(interface)

c# - 从上一个位置恢复滚动时列表框跳到顶部