统一失败的视图注入
本文关键字:视图 注入 失败 | 更新日期: 2023-09-27 17:57:17
我在使用 Prism 4 进行导航时遇到问题。
我已经设置了一个测试解决方案,其中我有一个 shell 的区域称为 MainRegion
:
<Window x:Class="PrismNavigationTest.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://www.codeplex.com/prism"
Title="ShellView" Height="350" Width="525">
<Grid>
<ContentControl prism:RegionManager.RegionName="MainRegion"/>
</Grid>
</Window>
接下来,我有一个引导程序,它将位于不同项目中的Module
添加到我的modulecatalog
:
protected override void ConfigureModuleCatalog()
{
Type module = typeof(Module.ModuleInit);
ModuleCatalog.AddModule(new ModuleInfo("Module", module.AssemblyQualifiedName));
base.ConfigureModuleCatalog();
}
在 ModuleInit
类的 Initialize 方法中,我正在尝试更改mainregion
的视图。
public class ModuleInit : IModule
{
private IUnityContainer container;
private IRegionManager regionManager;
public ModuleInit(IUnityContainer container, IRegionManager regionManager)
{
this.container = container;
this.regionManager = regionManager;
}
public void Initialize()
{
// TODO This works
//regionManager.RegisterViewWithRegion("MainRegion", () => container.Resolve<View>());
// TODO This doesn't work
container.RegisterType<object, View>("View1");
regionManager.Regions["MainRegion"].RequestNavigate(new Uri("View1", UriKind.Relative));
}
}
使用视图发现有效,但视图注入无效。
更改以下行;
regionManager.RequestNavigate("MainRegion", "View1");
对此;
var view1 = new Uri("View1", UriKind.Relative);
regionManager.RequestNavigate("MainRegion", view1);
另外,似乎还有另一个问题,您在显示带有RegisterViewWithRegion
的视图时调用() => container.Resolve<View>()
。然后,您似乎已经注册了视图。但是在"不起作用"部分,您再次注册View
。
问题出在我的Bootstrapper
.
在InitializeShell
方法中,我使用以下代码从容器中解析了 Shell:
Application.Current.MainWindow = (Window)ServiceLocator.Current.GetInstance<Shell>();
我将其更改为使用已经初始化的外壳:
Application.Current.MainWindow = (Window)this.Shell;
我仍然对此感到有些困惑,但我认为这与 Unity 创建新对象有关,而不是在解析时默认为单例。