如何在View Model中获取子容器引用

时间:2010-06-01 15:48:49

标签: scope prism containers region

我正在尝试将模块A中的ViewModel(称为“AVM”)包含在存储库中的数据服务(实体管理器)共享到模块B中的ViewModel(称为“BVM”),我不能让这个工作。我们使用PRISM / Unity 2.0

这是我的情景:

用户可以打开多个客户屏幕(复合视图作为迷你外壳) 客户(工作单位)。我们使用子容器实现这一点。每个子容器都使用自己的实体管理器解析它自己的存储库(存储库是子容器中的单例)。这在模块A中完成。主shell有一个主区域管理器,每个Customer屏幕及其子容器创建一个范围区域。 在每个客户屏幕中都有一个View'AV'(连接到ViewModel'AVM'),其SubRegion(标签控件)注册为'SubRegion'。我们用'Screen Factory'创建了这个

在模块B中,我们在View'BV'和ViewModel'BVM'中有一个客户订单。在模块B的构造函数中,我们通过注入获得主容器。在初始化方法中,我们解析(主)区域管理器并使用它注册View'BV'。在View'BV'的构造函数中,注入/创建ViewModel'BVM'。

现在这样可行,但ViewModel'BVM'无法获取子容器。它只获得主要容器。 这是可行的,还是我必须以另一种方式做到这一点?

谢谢, 尼尔斯

1 个答案:

答案 0 :(得分:0)

有几种可能性:

我最喜欢的选择是完全在专门用于Ioc的模型绑定器内完成 - 无论如何你都必须这样做。我喜欢Autofac使用的模型和code spells it out quite succinctly

我不知道Unity的情况 - 自v1.1以来我没有触及它。如果您自己滚动,一种方法是获取创建的子容器并在TLS中注册它。然后,您可以覆盖Ioc模型绑定器功能以追踪TLS存储的子容器。相当hackish,但我不确定另一种方式。我首先会选择#1选项。选项#2只是一种研究选项的方法。