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容器。

PRISM:如何在模块内实现RegisterViewForNavigation';s Initialize方法

错误是因为主项目模块中引用的版本不同。

Visual Studio仅将主项目中引用的程序集复制到输出目录。

由于模块的程序集需要一个版本号更高的棱镜程序集,因此会引发您提到的异常。

更新所有程序包应该可以解决此问题。