我的印象是以下两个代码语句是类似的
var region = regionManager.Region["SomeRegion"]
region.Add(container.Resolve<SomeView>());
和
regionManager.AddToRegion("SomeRegion", container.Resolve<SomeView>());
但如我的项目中所示,它们都产生不同的结果 - 令我惊讶的是,使用 regionManager.AddToRegion 不需要使用 Scoped Regions,但使用 region.Add 我们需要限定区域。
请克隆 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 可以在不创建范围的情况下工作吗?