【发布时间】:2011-08-19 06:58:49
【问题描述】:
我有一个具有相应 ViewModel 的 WPF 视图。所有实例都通过一个统一容器解决。因为我使用的是 prism,所以我需要两个独立的视图实例将其添加到视图注册到的两个不同区域中。如果我尝试将一个实例添加到两个区域中,我会得到一个
InvalidOperationException:指定 元素已经是逻辑子元素 的另一个元素。断开它 首先。
当视图被添加到第二个区域时,因为它已经添加到了第一个区域。
使用 TransientLifetimeManager 可以轻松解决此问题,该管理器始终返回一个新实例,因此两个区域都将填充一个独立的实例。
但是我们决定在新用户登录时创建一个子容器。每个与会话相关的视图和视图模型都使用此子容器解析。当用户的会话结束时,子容器被释放,因此每个与会话相关的实例也被释放。但是使用 TransientLifetimeManager 统一容器无法处理这些实例。
我们需要的是一个生命周期管理器,它总是返回一个新实例,但也能够处理这些实例。身边已经有这样的终身经理了吗?还是有其他方法可以实现我上面描述的?
【问题讨论】:
-
对于那些阅读答案的人:“使有资格成为 GC'ed”并不“意味着调用 Dispose [立即,或从技术上]”。对于严格的范围/生命周期,这是一个很大的差异。
标签: mvvm unity-container prism