PRISM:如何在模块内实现RegisterViewForNavigation';s Initialize方法
本文关键字:方法 Initialize RegisterViewForNavigation 实现 模块 PRISM | 更新日期: 2023-09-27 18:27:20
我用这种方式在模块类的Initialize方法中注册我的模块视图;
//CalendarModule.cs
public void Initialize()
{
_container.RegisterType<object, CalendarModuleView>(nameof(CalendarModuleView));
}
我通过调用ModuleManager.LoadModule("CalendarModule");
来加载我的模块。模块初始化后,我导航到新加载的模块;
_regionManager.RequestNavigate(RegionNames.MainContentRegion, "CalendarModuleView");
到目前为止没有问题。一切都如我所料。我可以浏览所有按需模块。
但当我尝试用_container.RegisterTypeForNavigation<CalendarModuleView>();
替换视图注册时,在模块加载过程中出现以下错误;
"Prism.Modularity.ModuleInitializeException"类型的异常发生在Prism.Wpf.dll中,但未在用户代码中处理
附加信息:初始化时发生异常模块"CalendarModule"。
内部异常:{"无法加载文件或程序集"Prism.Unity.Wpf,Version=6.2.0.0,Culture=neutral,PublicKeyToken=91a96d2a154366d8"或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT:0x80131040中的异常)":"Prism.Unity.Wpf,Version=6.0.0,Culture=neutral
我想知道RegisterTypeForNavigation<T>
容器扩展方法是否与RegisterType<object, T>(nameof(T))
容器方法做同样的工作。如果是,是什么原因导致前面的错误?谢谢
仅供参考:我的模块的初始化模式是OnDemand。
我使用Prism.Unity作为DI容器。
错误是因为主项目的包与模块中引用的版本不同。
Visual Studio仅将主项目中引用的程序集复制到输出目录。
由于模块的程序集需要一个版本号更高的棱镜程序集,因此会引发您提到的异常。
更新所有程序包应该可以解决此问题。