我们的应用程序有几个窗口。目前它们在单独的进程中运行,但这使得它们之间的通信很尴尬(并且增加了 JMS 连接等资源)。想法是将结构重构为单一进程,以简化通信和资源/服务共享。
我想以这种方式使用棱镜模块:
这个想法是将每个窗口的“主程序”加载为一个棱镜模块,然后每个模块可以在它认为合适的时候初始化自己的 DI 容器(每个窗口由不同的团队制作)。模块不会对彼此的 UI 做出贡献,但它们可以通过 Main MEF 容器共享服务。Main 还可以加载一些可用于模块的通用服务。
通过将每个模块分离到其自己的 DI 容器中,我试图防止模块之间的依赖地狱,并鼓励更规范地使用来自另一个模块的服务。
- 这甚至可能吗,或者 DI 容器是否相互冲突(处于同一进程中)?
- Prism 中有什么东西会反对这种解决方案吗?
- 我应该只创建自己的迷你模块系统而不是棱镜 IModule
我们一直在研究的另一种可能性是将每个模块放到它自己的 AppDomain 中。然而,这将有其自身的缺点(如共享服务必须通过 wcf 等完成)。然而,单独的 AppDomain 可以防止可能的 DI 容器冲突,并允许 main 在 AppDomain 失败的情况下作为看门狗工作。有人对基于 AppDomain 的解决方案有经验吗?有没有这里没有描述的问题?