xamarinmvvmprismdryiocnavigationservice

Xamarin Prism Unable to navigate to LoginPageViewModel


I am trying to make my Xamarin Project use MVVM with Prism and DryIoc.

I mostly want to use AutoRegistration like below:

[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>();
}

I have also tried Manual Registration:

 containerRegistry.RegisterForNavigation<LoginPage, LoginPageViewModel>();

Neither works, It hits the Login Page code behind then breaks with the following error:

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.'

I've also tried using a Linker file setting it's build action to "linkdescription"

As for my Login Page here is the declaration

   public LoginPageViewModel(ICoreServices coreServices)
            : base(coreServices)

Solution

  • So Once I investigated Inside of ICoreServices I commented out each of the dependencies then discovered that IUserSession was the once causing problems then I dug into that and discovered that the dependences for IAppInfo and IVersionTracking were missing in the App.Xaml.cs registr tyepes so I added that and then it worked!

    containerRegistry.Register<IAppInfo, AppInfoImplementation>();
    containerRegistry.Register<IVersionTracking, VersionTrackingImplementation>();