4

我想构建一个 WPF/Prism 应用程序,其中每个顶级窗口都在其自己的 UI 线程中。这是相当直截了当的。我使用 Unity 作为我的 DI 容器,并希望创建容器层次结构。在最简单的情况下,根容器将位于应用程序级别,每个窗口都有一个子容器。这是可取的,因为每个窗口都可以有自己的共享对象,这些对象由子容器限定。

我希望每个窗口都有自己的 Prism 区域管理器,这样我就不会有任何跨线程问题,因为每个窗口都有自己的 UI 线程。我看到 Region 和 RegionManager 使用 ServiceLocator.Current 单例。这是一个问题,因为我希望 RegionManager 使用它所限定的容器,而静态单例是不可能的。你们中是否有人遇到过这个问题,您将如何解决它?

谢谢!

4

2 回答 2

0

我实际上需要做同样的事情,我想出了以下解决方案:

在导航到“子”区域之前,请执行以下操作:

var childRegion = _childRegionManager.Regions["ChildRegion"];            
_childRegion.NavigationService = _childContainer.GetExportedValue<IRegionNavigationService>();
_childRegion.NavigationService.Region = _childRegion;

这会在子区域上设置正确的导航服务。

当然,childContainer应该IRegionNavigationService在它自己的目录中有一个,这样它才能正确地组合它。

于 2012-02-19T11:12:11.590 回答
0

您可以将 Bootstrapper 作为子容器并在那里注册您的类型。并将您的 ServiceLocater 放在将调用您的引导程序的应用程序级别。

更多信息;http://msdn.microsoft.com/en-us/library/ff649077.aspx

于 2011-05-07T21:41:24.843 回答