程序执行期间MEF插件的加载和卸载

时间:2012-01-03 21:30:46

标签: c# .net plugins module mef

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

1 个答案:

答案 0 :(得分:2)

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

因此,不要将IWorker带到您的所有服务中,而是使用IWorkerController。