【发布时间】:2011-07-01 01:05:27
【问题描述】:
我的 silverlight 应用程序中有 2 个区域,利用 prism 4 和统一主 shell 视图, Authenticated region 和 Non-authenticated region,以及一个菜单项。
在经过身份验证的区域内,根据注入其中的视图,还有更多的子区域。
在加载应用程序时,我将看到登录屏幕“未验证区域”,登录时,我将显示在已验证区域。
当我点击菜单上的注销按钮时,我将再次看到登录视图。
但是当我第二次登录时,我在验证区域中加载的现有视图仍然存在。
我在注销时尝试了以下代码,以删除该区域的所有视图,但从容器中检索到的视图仍然是现有视图..
var regions = this.RegionManager.Regions;
foreach (var region in regions)
{
if (region.Name == this.AuthenticatedRegionName)
{
var views = region.Views;
foreach(var view in views)
{
region.Remove(view);
}
}
}
当我出于某种原因调用请求导航时,我实际上收到了一些 region key not found 错误,但我认为主要问题出在容器上。
如何告诉 unity 处理所有视图?
【问题讨论】:
-
您是否偶然将给定视图定义为 ContainerControlledLifetime? Region.Remove 应该足以从给定区域中删除视图。对给定视图类型调用容器上的 Resolve 应该提供一个新实例,除非您有一个生命周期管理器。
-
感谢您的回复,我认为它确实有道理,是的,我的一些屏幕是 containerControlledLifetime(单例)...如何重置/清除生命周期管理器?
-
添加了解决您问题的答案;提供不同的方法
标签: c# asp.net silverlight prism logout