【问题标题】:MEF Plugins Loading and Unloading During Program Execution程序执行期间的 MEF 插件加载和卸载
【发布时间】:2012-01-03 21:30:45
【问题描述】:

我们有一个应用程序,它具有可以通过多种不同方式实现的功能。我们有一个标准化的接口(比如,IWorker)来模拟所需的功能。我们有几个模块,每个模块都有自己的 IWorker 实现,它们以截然不同的方式处理必要的任务。目前,根据需要的应用程序版本,我们提供包含适当模块的特定 DLL,一切都很好。但是,我们现在希望支持用户可以在运行时根据变化的条件更换模块的场景(即网络连接丢失,因此我们现在希望使用 IFileWorker 模块而不是 INetworkWorker 模块)。我们如何在运行时卸载一个模块并加载另一个模块?

【问题讨论】:

  • MEF 不包括开箱即用的功能。您需要将导出加载到单独的 AppDomain 并卸载 AppDomain 以卸载导出。 this 相关问题也可能有所帮助。

标签: c# .net plugins module mef


【解决方案1】:

您可以采用一种简单的方式创建一个 IWorkerController 类(导出共享),而不是加载和卸载您的模块,该类包含通过 MEF 加载的所有 IWorker 模块的集合。因此,如果您想使用 IWorker 功能 - 您只需询问您的 IWorkerController(可能默认为 INetworkWorker)。你可以通过告诉你的 IWorkerControll 来简单地切换到你想要的 iworker。

因此,您现在使用 IWorkerController,而不是将 IWorker 用于您的所有服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多