我正在尝试实现一个新的基于WPF Prism 6的应用程序。
Prism为RegionManager
接口提供了一个很好的IRegionManager
实现,允许我与区域进行交互并为它们构建视图。
我编写了一个简单的类,它扩展了RegionManager
类和IRegionManager
接口,为我的区域提供了一个很好的包装。
在我的主视图中,我使用XAML
代码创建了5个区域,如此
<ContentControl DockPanel.Dock="Bottom"
prism:RegionManager.RegionName="{x:Static foundation:RegionNames.BottomRegion}" />
我的ICoreRegionManager
界面如下所示
public interface ICoreRegionManager : IRegionManager
{
IRegion GetMainRegion();
IRegion GetTopRegion();
IRegion GetLeftRegion();
IRegion GetRightRegion();
IRegion GetBottomRegion();
IRegionManager AddToMainRegion(object view);
IRegionManager AddToTopRegion(object view);
IRegionManager AddToLeftRegion(object view);
IRegionManager AddToRightRegion(object view);
IRegionManager AddToBottomRegion(object view);
}
如何使用ICoreRegionManager
代替IRegionManager
?
以下是我在UnityBootstrapper
类
protected override void ConfigureContainer()
{
base.ConfigureContainer();
RegisterTypeIfMissing(typeof(IUnitOfWork), typeof(EntityUnitOfWork), false);
RegisterTypeIfMissing(typeof(ICoreRegionManager), typeof(CoreRegionManager), true);
}
当我尝试访问我的区域时,我发现区域未找到错误。以下是我尝试将视图构建到我的主要区域的方式。
var regionManager = Container.Resolve<ICoreRegionManager>();
regionManager.AddToMainRegion(view);
当我调试应用时,我可以看到regionManager.Regions
集合中没有区域。似乎区域仅在RegionManager
实例中注册。此外,当我(Container.Resolve<IRegionManager>()).Regions;
时,我可以按预期看到我的5个区域。
如何用自己的方法覆盖prism的区域管理器?
答案 0 :(得分:1)
来自文件https://msdn.microsoft.com/en-us/library/gg430866(v=pandp.40).aspx
替换默认棱镜库类型
有时您可能需要更改或扩展底层证券 为应用程序实现Prism库类型。因为 Prism Library依赖于依赖注入,可以替换类型 在引导序列期间以及您的应用程序和 Prism Library将使用新类型。
在你的bootstrapper类中执行以下操作
protected override void ConfigureContainer()
{
// First you register your own implementation of ICoreRegionManager
RegisterTypeIfMissing(typeof(ICoreRegionManager), typeof(CoreRegionManager), true);
// Then you register your own implementation of IRegionManager
RegisterTypeIfMissing(typeof(IRegionManager), typeof(CoreRegionManager), true);
// Last step is to call the base ConfigureContainer() method to register the rest
base.ConfigureContainer();
}