如何解决Xamarin Prism无法导航到LoginPageViewModel
我正在尝试使我的Xamarin项目在Prism和DryIoc上使用MVVM。
[AutoRegisterForNavigation]
...
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
//Pages
containerRegistry.RegisterForNavigation<NavigationPage>();
//Services
containerRegistry.RegisterSingleton<ILocalDatabase,LocalDatabase>();
containerRegistry.RegisterSingleton<IUserProfileDataStore,UserProfileDataStore>();
containerRegistry.RegisterSingleton<IApplicationSettings,ApplicationSettings>();
containerRegistry.RegisterSingleton<ILogger,Logger>();
containerRegistry.RegisterSingleton<IApiService,ApiService>();
containerRegistry.RegisterSingleton<IUserSession,UserSession>();
containerRegistry.Register<Ibrowser,browserImplementation>();
containerRegistry.Register<IConnectivity,ConnectivityImplementation();
containerRegistry.Register<IFileSystem,FileSystemImplementation>();
containerRegistry.Register<ICoreServices,CoreServices>();
}
我也尝试过手动注册:
containerRegistry.RegisterForNavigation<LoginPage,LoginPageviewmodel>();
均不起作用,它会击中后面的“登录页面”代码,并因以下错误而中断:
Exception - High: Prism.Ioc.ContainerResolutionException:
An unexpected error occurred while resolving 'AppetiteApp.viewmodels.LoginPageviewmodel' --->
DryIoc.ContainerException: code: UnabletoResolveUnkNownService; message: Unable to resolve
Resolution root AppetiteApp.viewmodels.LoginPageviewmodel
with passed arguments [value(Prism.Navigation.ErrorReportingNavigationService)]
**System.NullReferenceException:** 'Object reference not set to an instance of an object.'
我也尝试过使用链接器文件将其构建动作设置为“ linkdescription”
public LoginPageviewmodel(ICoreServices coreServices)
: base(coreServices)
解决方法
LoginPageViewModel
的构造函数需要注册的ICoreServices
参数。
错误消息表明LoginPageViewModel
本身对IoC来说是未知的-这意味着类型LoginPageViewModel
并未直接注册,也无法通过动态注册或未知的服务解析器找到。
我不是Xamarin Prism的用户,所以我不确定其注册视图模型的机制。
顺便说一句,这部分错误
解决方案根AppetiteApp.ViewModels.LoginPageViewModel 带有传递的参数[value(Prism.Navigation.ErrorReportingNavigationService)]
基本上意味着视图模型是通过以下调用resolver.Resolve(typeof(LoginPageViewModel),args: new[] { errorReportingNavigationService })
希望它可以帮助您或Xamarin知识渊博的人跟踪错误原因。
,因此,一旦我在 ICoreServices 内部进行了调查,我便注释掉了每个依赖项,然后发现 IUserSession 是造成问题的一次原因,然后我深入研究了该依赖关系 App.Xaml.cs 注册类型中缺少 IAppInfo 和 IVersionTracking 的内容,所以我添加了它,然后它就起作用了!
containerRegistry.Register<IAppInfo,AppInfoImplementation>();
containerRegistry.Register<IVersionTracking,VersionTrackingImplementation>();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。