<分区>
我是插件世界的新手,我不得不去理解 mef。 目前我知道如何从特定文件夹加载插件。 现在我有一些问题:
- 我可以从配置文件(序列化)中指定的文件夹加载插件吗?
- 如何卸载插件?
- 如何加载介于最小和最大版本之间的特定版本的插件?
- 我如何包装目录并撰写,例如类似于“MEF 管理器”
可选:
- 如何显示插件中的表单?
感谢帮助
<分区>
我是插件世界的新手,我不得不去理解 mef。 目前我知道如何从特定文件夹加载插件。 现在我有一些问题:
可选:
感谢帮助
最佳答案
Can i load plugins from a folder which are specify in a configuarations file (Serialization) ?
是的,您可以使用 MEF 的 DirectoryCatalog 从文件夹加载插件类(class)。不过,您必须在配置文件中添加自己的部分,并为插件所在的每个文件夹创建一个 DirectoryCatalog
。 Unraveling 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/