Prism - region.add和regionManager.AddToRegion的工作方式不同

时间:2016-06-10 07:59:11

标签: c# wpf prism prism-5

我的印象是以下两个代码语句是偶然的

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我们需要作用域。

clone the repo,构建并运行项目,您应该得到一个ViewB已经注册的例外。现在打开TestModule.cs(见下文)并发表评论&#34; region.add&#34;如果你想看解决方案是完美无缺的,那么你可以看到解决方案是完美无缺的。

我已经阅读了文档并且已经看到项目间歇性地使用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无法创建范围?

1 个答案:

答案 0 :(得分:0)

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

您知道,如果您有多个地区的实例,则必须始终使用范围区域。