0

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

这是我的场景:

一个用户可以打开多个客户屏幕(作为迷你外壳的复合视图),每个屏幕与另一个客户(工作单元)一起打开。我们使用子容器来实现这一点。每个子容器使用自己的实体管理器解析自己的存储库(存储库是子容器中的单例)。这是在模块 A 中完成的。主 shell 有一个主区域管理器,每个客户屏幕及其子容器都会创建一个作用域区域。在每个客户屏幕中都有一个视图“AV”(连接到 ViewModel“AVM”),其中一个子区域(选项卡控件)注册为“子区域”。我们用“屏幕工厂”创造了这个

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

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

谢谢,尼尔斯

4

1 回答 1

0

有几种可能性:

我最喜欢的选择是完全在专门用于 Ioc 的模型绑定器中执行此操作 - 无论如何,这是您必须要做的。我喜欢 Autofac 使用的模型,并且代码非常简洁地说明了它

我不知道 Unity - 自 v1.1 以来我还没有接触过它。如果您自己滚动,一种方法是获取创建的子容器并将其注册到TLS中。然后,您可以覆盖 Ioc 模型绑定器功能以跟踪 TLS 存储的子容器。相当hackish,但我不确定另一种方式。我首先会选择上面的选项#1。仅将选项#2视为调查统一选项的一种方法。

于 2010-06-21T21:51:50.353 回答