【发布时间】:2016-06-10 07:59:10
【问题描述】:
我的印象是以下两个代码语句是类似的
var region = regionManager.Region["SomeRegion"]
region.Add(container.Resolve<SomeView>());
和
regionManager.AddToRegion("SomeRegion", container.Resolve<SomeView>());
但如in my project 所示,它们都产生不同的结果 - 令我惊讶的是,使用 regionManager.AddToRegion 不需要使用 Scoped Regions,但使用 region.Add 我们需要使用 scoped Regions。
请clone the repo,构建并运行项目,您应该会收到一个异常,即 ViewB 已注册。现在打开 TestModule.cs(见下文)并注释“region.add”行,然后取消注释 regionManager.AddToRegion,您将看到解决方案完美运行。
我浏览了文档并看到项目间歇性地使用 region.Add 和 regionManager.AddToRegion,但似乎 API 的工作方式有所不同。
https://github.com/rohits79/PrismRegionAmbiguity/blob/master/TestModule/TestModule.cs#L22-29
更新
注意到如果我添加三行 AddToRegion 则应用程序崩溃
regionManager.AddToRegion("ViewA", unityContainer.Resolve<ViewA>());
不过只需要两行
region.Add(container.Resolve<ViewA>());
这在 Prism 中看起来不是问题吗,想知道为什么 AddToRegion 可以在不创建范围的情况下工作吗?
【问题讨论】: