微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin Prism无法导航到LoginPageViewModel

如何解决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 举报,一经查实,本站将立刻删除。