我是插件世界的新手,并强迫理解mef。 目前我知道如何从特定文件夹加载插件。 现在我有一些问题:
optionaly:
感谢您的帮助
答案 0 :(得分:7)
我可以从文件夹中加载插件吗? 配置文件(序列化)?
是的,您可以使用MEF的DirectoryCatalog课程从文件夹加载插件。您必须在配置文件中添加自己的部分,并为插件所在的每个文件夹创建DirectoryCatalog
。 Unraveling 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添加插件元数据。然后是GetExports的CompisitionContainer方法,并在访问实际插件之前检查元数据。这是基于MEF的插件解决方案的标准程序。另请查看MEF2中添加的ExportFactory类,以获得更好的方法。
我如何包装目录&撰写例如就像“MEF” 管理器“
从一个非常简单的插件管理器类开始,该类提供基础知识(取决于你想做什么)并从中构建。
我如何在插件中显示表单?
你可以像没有MEF那样做。例如,您可以将一个表单属性添加到插件接口/基类中,并使每个插件负责创建/处理它。
在你开始这么做之前,我建议你检查Prism
(综合应用指南)和Smart Client Software Factory
。这些是需要极大灵活性的WPF和WinForms应用程序的强大框架。如果您决定检查它们,我认为最好的方法是使用样品。