0

我们的应用程序有几个窗口。目前它们在单独的进程中运行,但这使得它们之间的通信很尴尬(并且增加了 JMS 连接等资源)。想法是将结构重构为单一进程,以简化通信和资源/服务共享。

我想以这种方式使用棱镜模块:

棱镜模块

这个想法是将每个窗口的“主程序”加载为一个棱镜模块,然后每个模块可以在它认为合适的时候初始化自己的 DI 容器(每个窗口由不同的团队制作)。模块不会对彼此的 UI 做出贡献,但它们可以通过 Main MEF 容器共享服务。Main 还可以加载一些可用于模块的通用服务。

通过将每个模块分离到其自己的 DI 容器中,我试图防止模块之间的依赖地狱,并鼓励更规范地使用来自另一个模块的服务。

  1. 这甚至可能吗,或者 DI 容器是否相互冲突(处于同一进程中)?
  2. Prism 中有什么东西会反对这种解决方案吗?
  3. 我应该只创建自己的迷你模块系统而不是棱镜 IModule

我们一直在研究的另一种可能性是将每个模块放到它自己的 AppDomain 中。然而,这将有其自身的缺点(如共享服务必须通过 wcf 等完成)。然而,单独的 AppDomain 可以防止可能的 DI 容器冲突,并允许 main 在 AppDomain 失败的情况下作为看门狗工作。有人对基于 AppDomain 的解决方案有经验吗?有没有这里没有描述的问题?

4

1 回答 1

0

首先,在单独的进程上运行视图是一个坏主意。其次,prism 的所有想法都是在 1 个进程和 1 个(!)容器中运行来管理所有视图。视图之间的通信是通过服务和事件聚合完成的。您不需要它们之间的任何依赖关系。我给你举个例子:你的应用代表一个商店。您将有 1 个处理蔬菜的模块(视图、视图模型、模型)您将有 1 个处理乳制品的模块(视图、视图模型、模型)每个模块都需要使用肥皂服务来获取数据。这将是一个共享服务,将注入两个模块。你的第一个模块需要告诉所有关心蔬菜都卖完了的人,它会发送一个事件(聚合),需要知道的模块会监听这种事件。等等,模块之间的所有通信主要是通过共享服务和事件聚合完成的。希望我回答了你的问题

于 2015-01-07T14:49:07.303 回答