0

我的印象是以下两个代码语句是类似的

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 可以在不创建范围的情况下工作吗?

4

1 回答 1

0

我过去见过这种情况。我从来没有花时间去研究它,因为这没什么大不了的。AddToRegion 实际上调用了 Region.Add,所以我不确定为什么会突然发生这种情况。我认为这取决于 Region 类型,因为调用 region.Actiavte 会立即调用错误。

请注意,如果您有一个区域的多个实例,则必须始终使用作用域区域。

于 2016-06-10T11:26:54.490 回答