我正在处理的Prism / Unity应用程序有一个视图,负责实现GoBack()
的{{1}}和GoForward()
方法。这将是我第一次需要对使用RegionManager的任何东西进行单元测试,而且我遇到了错误,建议
必须设置ServiceLocationProvider
当我尝试找到导航被控制的区域时(该区域与所讨论的视图所属的区域不同)。
基于此,我做了一些挖掘,并没有遇到任何关于在Prism导航环境中解决“ServiceLocationProvider”错误的问题。如果可能的话,我宁愿避免嘲笑任何东西,但如果这最终成为唯一/最好的选择,那么这不是不可能的。
如果我可以提供更多信息,请告知我们。感谢您提供的任何见解!
答案 0 :(得分:3)
进行了一些阅读,发现ServiceLocationProvider
是Bootstrapper.Run()
的一部分。创建虚拟引导程序时遇到了一些问题,因为我不确定如何实现CreateShell
,但我意识到你只能返回一个新的DependencyObject
。
这是我的测试引导程序的样子:
public class TestBootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return new DependencyObject();
}
}
在测试开始时需要进行以下操作以添加区域:
TestBootstrapper bootstrapper = new TestBootstrapper();
bootstrapper.Run();
this.RegionManager = new RegionManager();
this.RegionManager.Regions.Add(UIRegionNames.ContextResultsPane, new Region());
在正在测试的ViewModel的构造函数中,我执行以下操作来获取导航服务日志的实例:
public NavigationContextControlViewModel(IRegionManager regionManager)
{
IRegionNavigationService navigationService;
this.RegionManager = regionManager;
navigationService = this.RegionManager.Regions[UIRegionNames.ContextResultsPane].NavigationService;
navigationService.Navigated += CheckIfNavigateCanExecuteHasChanged;
this.ContextResultsNavigationJournal = navigationService.Journal;
}