c# - 实例化 PRISM shell 的多个实例

标签 c# unity-container prism

我正在尝试设置一个允许打开同一窗口(shell)的多个实例的应用程序。我有一个主 shell(由 Bootstrapper 设置),我可以从中打开第二个 shell 的新实例。第二个 shell 包含多个区域。

现在有一个问题,因为给定区域只能在每个应用程序(或 RegionManager)中出现一次,所以我尝试为每个 shell 提供自己的 RegionManager。这似乎工作正常,但是我还使用 Unity 将 RegionManager 注入(inject)到我的 ViewModels/Controllers 中,这意味着我总是获得主 shell 的实例,而不是绑定(bind)到 ViewModel 所属 shell 的实例。

是否有可能使这项工作成功?这对于我的用例来说是正确的方法吗?

最佳答案

有几种方法可以解决这个问题。也许最简单的方法是使用 Scoped RegionManager: https://msdn.microsoft.com/en-us/library/ff921162.aspx http://southworks.com/blog/2011/11/30/prism-region-navigation-and-scoped-regions/

另一个是您可以将 IRegionManager 的命名实例(每个 shell 窗口一个)注册到容器中,并按名称解析这些实例。但只有当依赖于这些命名实例的 ViewModels/Services 只能在一个或另一个窗口中创建时,这才真正有效。

另一种方法是为每个窗口创建一个子容器,并将单独的 RegionManager 实例注册到每个子容器中,以便尝试解析窗口内的实例会违背该窗口的区域管理器。

关于c# - 实例化 PRISM shell 的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33010756/

相关文章:

C# linq to sql - 动态选择表

c# - 获取错误 SqlException 未被用户代码处理

.net - 通过Unity的同一条消息的多个使用者在MassTransit中不起作用

c# - 如何设置统一容器以创建模拟/真实记录器实例

silverlight - 如何在 MVVM 应用程序中实现撤消/重做?

c# - 使用反射设置类型为 List<CustomClass> 的属性

c# - 如何在预构建事件中将源文件 (.cs) 添加到资源 (.resx)?

c# - 我应该使用 Unity(它还活着吗)?

xamarin.forms - 在应用启动时在 OnNavigedTo 中使用 IPageDialogService

wpf - 使用 PRISM 切换主视图