棱镜模块和多个DI容器

时间:2015-01-07 14:29:17

标签: architecture module prism ioc-container prism-5

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

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

prism modules

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

通过将每个模块分离到自己的DI容器,我尝试防止模块之间的依赖性地狱,并鼓励从另一个模块更严格地使用服务。

  1. 这是否可能,或DI容器是否相互碰撞(处于同一过程中)?
  2. Prism中有什么东西可以再次对抗这种解决方案吗?
  3. 我应该创建自己的迷你模块系统而不是棱镜IModule
  4. 我们一直在冒险的另一种可能性是将每个模块放到自己的AppDomain中。然而,这将有其自身的缺点(如共享服务必须通过wcf等完成)。但是,单独的AppDomains会预防可能的DI容器冲突,并允许main在AppDomain发生故障时作为监视器工作。有没有人有基于AppDomain的解决方案的经验?有没有这里没有描述的问题?

1 个答案:

答案 0 :(得分:0)

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