我想构建一个服务器应用程序,其运行时间几乎达到100%。 该应用程序将使用C#构建,并将使用具有其中功能的模块(.dll文件)。
如果我在某一点确定在模块中添加某些功能或修复错误,我希望不关闭应用程序,覆盖.dll文件然后重新启动应用。 如果我可以停止模块,更新它并恢复 - 那就太棒了!
我正在寻找的是C#的组件/服务配置器设计模式。 它的工作原理如下图所示:
ComponentRepository
可以注册Component
,使用init()
将其加载到应用中,使用suspend()
暂停,使用fini()
卸载,然后恢复他们与resume()
。
应用程序将加载模块,运行它直到我有模块更新,暂停和挂起模块,覆盖现有模块,并加载新模块。
Microsoft Prism可以加载模块,但正如他们在一个小方框中所述:
加载并初始化模块后,无法卸载模块组件。
如果不卸载所有组件,则无法卸载单个组件 包含它的应用程序域。
因此,Microsoft提出的选项是application creates an AppDomain
并使用它,稍后将其卸载。
问题:
如果我为我使用的每个模块创建了一个单独的AppDomain
,我该如何在它们之间进行通信? MVVM Light's Messenger
或Prism's EventAggregator
会有效吗?