MEF加载和卸载特定插件?

时间:2013-01-22 20:08:06

标签: c# winforms plugins mef

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

  • 我可以从配置文件(序列化)中指定的文件夹中加载插件吗?
  • 我如何卸载插件?
  • 如何在min& max version?
  • 之间加载具有特定版本的插件
  • 我如何包装目录&撰写例如像“MEF经理”
  • 之类的东西

optionaly:

  • 我如何在插件中显示表单?

感谢您的帮助

1 个答案:

答案 0 :(得分:7)

  

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

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

  

我如何卸载插件?

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

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

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

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

  

如何在min& max之间加载具有特定版本的插件   版本

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

  

我如何包装目录&撰写例如就像“MEF”   管理器“

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

  

我如何在插件中显示表单?

你可以像没有MEF那样做。例如,您可以将一个表单属性添加到插件接口/基类中,并使每个插件负责创建/处理它。

在你开始这么做之前,我建议你检查Prism(综合应用指南)和Smart Client Software Factory。这些是需要极大灵活性的WPF和WinForms应用程序的强大框架。如果您决定检查它们,我认为最好的方法是使用样品。

祝你好运