我的印象是以下两个代码语句是偶然的
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无法创建范围?
答案 0 :(得分:0)
我过去见过这个。我从来没有花时间去研究它,因为它不是那么大的交易。 AddToRegion实际上调用了Region.Add,所以我不确定为什么会发生这种情况。我认为这取决于Region类型,因为调用region.Actiavte会立即调用错误。
您知道,如果您有多个地区的实例,则必须始终使用范围区域。