Maui Prism .CreateWindow() navigation error

I’m working on transitioning a Xamarin.Forms app to Maui. In MauiProgram we call MauiAppBuilder.UsePrism() on the PrismAppBuilder we call .RegisterTypes() to register services and pages for navigation. We’ve confirmed that the services are getting initialized. At the end, in what was .OnAppStart, we now use .CreateWindow().

.CreateWindow(async (container, navigation) =>
{
    AppCenter.Start("android=e0b01237-af3e-4e82-8df0-ebb24ae1c20d;ios=923451b3-01d3-4807-9eec-1ae9069c9fe9",
        typeof(Analytics), typeof(Crashes));

    var result = await navigation.NavigateAsync("/AppInitPage");
    if (!result.Success)
    {
        HandleNavigationError(result.Exception);
    }
})

This is resulting in non-successful navigation and resulting in the following exception:
Microsoft.Maui.Controls.InvalidNavigationException: ‘Expected Navigation Failed. No Root Window has been created.’

PrismAppBuilder:

            .UsePrism(prism =>
                prism
#if ANDROID
                    .RegisterTypes(Platforms.Android.PlatformRegistrations.RegisterPlatformTypes)
#endif
                    .RegisterTypes(containerRegistry =>
                    {
                        Barrel.ApplicationId = AppInfo.Current.PackageName;

                        //Register all of the services
                        containerRegistry.RegisterInstance<IPreferences>(Preferences.Default);
                        containerRegistry.RegisterInstance<IConnectivity>(Connectivity.Current);
                        containerRegistry.RegisterInstance<IAppInfo>(AppInfo.Current);
                        containerRegistry.RegisterInstance<IDeviceInfo>(DeviceInfo.Current);
                        containerRegistry.RegisterInstance<IVersionTracking>(VersionTracking.Default);
                        containerRegistry.RegisterSingleton<IAppSettings, AppSettings>();
                        containerRegistry.RegisterSingleton<IDb, Db>();
                        containerRegistry.RegisterSingleton<IAPI, API>();
                        containerRegistry.RegisterSingleton<ISyncManager, SyncManager>();
                        containerRegistry.RegisterSingleton<ISyncWorker, SyncWorker>();

                        containerRegistry.Register<IAuthentication, Authentication>();
                        containerRegistry.Register<IEncryptDecrypt, StringEncryptor>();
                        containerRegistry.Register<IHelpers, Helpers>();


                        //Register Pages
                        containerRegistry.RegisterForNavigation<ThemedNavigationPage>("NavigationPage");
                        containerRegistry.RegisterForNavigation<AboutPage>();
                        containerRegistry.RegisterForNavigation<AppInitPage>();
                        containerRegistry.RegisterForNavigation<TermsOfServicePage>();
                        containerRegistry.RegisterForNavigation<LoginPage>();
                        containerRegistry.RegisterForNavigation<CustomerSearchPage>();
                        containerRegistry.RegisterForNavigation<SettingsPage, SettingsPageViewModel>();
                        containerRegistry.RegisterForNavigation<CustomerPage>();
                        containerRegistry.RegisterForNavigation<FilesPage>();
                        containerRegistry.RegisterForNavigation<PhotoPage>();
                        containerRegistry.RegisterForNavigation<CustomerContactPage>();
                        containerRegistry.RegisterForNavigation<AssetPage>();
                        containerRegistry.RegisterForNavigation<ProductPage>();

                        //containerRegistry.RegisterGlobalNavigationObserver();

                        App.Container = containerRegistry.GetContainer();

                        App.Container.Resolve<IDb>().InitializeTables();
                    })
                    .AddGlobalNavigationObserver(context => context.Subscribe(x =>
                    {
                        if (x.Type == NavigationRequestType.Navigate)
                            Console.WriteLine($"Navigation: {x.Uri}");
                        else
                            Console.WriteLine($"Navigation: {x.Type}");

                        var status = x.Cancelled ? "Cancelled" : x.Result.Success ? "Success" : "Failed";
                        Console.WriteLine($"Result: {status}");

                        if (status == "Failed" && !string.IsNullOrEmpty(x.Result?.Exception?.Message))
                            Console.Error.WriteLine(x.Result.Exception.Message);
                    }))
                    .OnInitialized(_ =>
                    {
                        Microsoft.Maui.ApplicationModel.VersionTracking.Track();
                    })
                    .CreateWindow(async (container, navigation) =>
                    {
                        AppCenter.Start("android=e0b01237-af3e-4e82-8df0-ebb24ae1c20d;ios=923451b3-01d3-4807-9eec-1ae9069c9fe9",
                            typeof(Analytics), typeof(Crashes));

                        var result = await navigation.NavigateAsync("/AppInitPage");
                        if (!result.Success)
                        {
                            HandleNavigationError(result.Exception);
                        }
                    })
            );

Exception stack:

[DOTNET] Navigation: http://localhost/AppInitPage
[DOTNET] Result: Failed
[DOTNET] A dependency issue occurred while resolving the ViewModel. Check the InnerException for the ContainerResolutionException
[DOTNET] Prism.Navigation.NavigationException: A dependency issue occurred while resolving the ViewModel. Check the InnerException for the ContainerResolutionException
[DOTNET]  ---> Prism.Mvvm.ViewModelCreationException: Unable to Create ViewModel for 'myApp.Views.AppInitPage'.
[DOTNET]  ---> Prism.Ioc.ContainerResolutionException: An unexpected error occurred while resolving 'myApp.ViewModels.AppInitPageViewModel'
[DOTNET]  ---> DryIoc.ContainerException: code: Error.UnableToResolveFromRegisteredServices;
[DOTNET] message: Unable to resolve resolution root myApp.ViewModels.AppInitPageViewModel with passed arguments [Constant(Microsoft.Maui.Dispatching.Dispatcher, typeof(Microsoft.Maui.Dispatching.Dispatcher))]
[DOTNET]   from container with scope {Name=null}
[DOTNET]  with Rules with {TrackingDisposableTransients, FuncAndLazyWithoutRegistration, SelectLastRegisteredFactory} and without {ThrowOnRegisteringDisposableTransient}
[DOTNET]  with FactorySelector=SelectLastRegisteredFactory
[DOTNET]  with Made={FactoryMethod=ConstructorWithResolvableArguments}
[DOTNET]   with normal and dynamic registrations:
[DOTNET]   (DefaultDynamicKey(0), {FactoryID=869, ImplType=myApp.ViewModels.AppInitPageViewModel, Reuse=TransientReuse, HasCondition})
[DOTNET]    at DryIoc.Throw.It(Int32 error, Object arg0, Object arg1, Object arg2, Object arg3) in /_/src/DryIoc/Container.cs:line 14774
[DOTNET]    at DryIoc.Container.TryThrowUnableToResolve(Request request) in /_/src/DryIoc/Container.cs:line 933
[DOTNET]    at DryIoc.Container.DryIoc.IContainer.ResolveFactory(Request request) in /_/src/DryIoc/Container.cs:line 915
[DOTNET]    at DryIoc.Container.ResolveAndCacheKeyed(Int32 serviceTypeHash, Type serviceType, Object serviceKey, IfUnresolved ifUnresolved, Object scopeName, Type requiredServiceType, Request preResolveParent, Object[] args) in /_/src/DryIoc/Container.cs:line 510
[DOTNET]    at DryIoc.Container.DryIoc.IResolver.Resolve(Type serviceType, Object serviceKey, IfUnresolved ifUnresolved, Type requiredServiceType, Request preResolveParent, Object[] args) in /_/src/DryIoc/Container.cs:line 469
[DOTNET]    at DryIoc.Resolver.Resolve(IResolver resolver, Type serviceType, Object[] args, IfUnresolved ifUnresolved, Type requiredServiceType, Object serviceKey) in /_/src/DryIoc/Container.cs:line 8673
[DOTNET]    at Prism.Container.DryIoc.DryIocScopedProvider.Resolve(Type type, ValueTuple`2[] parameters) in /_/src/Prism.Container.DryIoc/DryIocScopedProvider.cs:line 54
[DOTNET]    --- End of inner exception stack trace ---
[DOTNET]    at Prism.Container.DryIoc.DryIocScopedProvider.Resolve(Type type, ValueTuple`2[] parameters) in /_/src/Prism.Container.DryIoc/DryIocScopedProvider.cs:line 58
[DOTNET]    at Prism.PrismAppBuilder.DefaultViewModelLocator(Object view, Type viewModelType) in D:aPrismPrismsrcMauiPrism.MauiPrismAppBuilder.cs:line 118
[DOTNET]    --- End of inner exception stack trace ---
[DOTNET]    at Prism.PrismAppBuilder.DefaultViewModelLocator(Object view, Type viewModelType) in D:aPrismPrismsrcMauiPrism.MauiPrismAppBuilder.cs:line 126
[DOTNET]    at Prism.Mvvm.ViewModelLocationProvider.AutoWireViewModelChanged(Object view, Action`2 setDataContextCallback) in D:aPrismPrismsrcPrism.CoreMvvmViewModelLocationProvider.cs:line 136
[DOTNET]    at Prism.Mvvm.ViewModelLocator.Autowire(Object view) in D:aPrismPrismsrcMauiPrism.MauiMvvmViewModelLocator.cs:line 85
[DOTNET]    at Prism.Mvvm.ViewRegistryBase.Autowire(BindableObject view) in D:aPrismPrismsrcMauiPrism.MauiMvvmViewRegistryBase.cs:line 25
[DOTNET]    at Prism.Mvvm.ViewRegistryBase`1[[Microsoft.Maui.Controls.BindableObject, Microsoft.Maui.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].CreateView(IContainerProvider container, String name) in D:aPrismPrismsrcPrism.CoreMvvmViewRegistryBase{TBaseView}.cs:line 51
[DOTNET]    at Prism.Navigation.PageNavigationService.CreatePage(String segmentName) in D:aPrismPrismsrcMauiPrism.MauiNavigationPageNavigationService.cs:line 903
[DOTNET]    --- End of inner exception stack trace ---
[DOTNET]    at Prism.Navigation.PageNavigationService.CreatePage(String segmentName) in D:aPrismPrismsrcMauiPrism.MauiNavigationPageNavigationService.cs:line 920
[DOTNET]    at Prism.Navigation.PageNavigationService.CreatePageFromSegment(String segment) in D:aPrismPrismsrcMauiPrism.MauiNavigationPageNavigationService.cs:line 943
[DOTNET]    at Prism.Navigation.PageNavigationService.ProcessNavigationForRootPage(String nextSegment, Queue`1 segments, INavigationParameters parameters, Nullable`1 useModalNavigation, Nullable`1 animated) in D:aPrismPrismsrcMauiPrism.MauiNavigationPageNavigationService.cs:line 589
[DOTNET]    at Prism.Navigation.PageNavigationService.ProcessNavigation(Page currentPage, Queue`1 segments, INavigationParameters parameters, Nullable`1 useModalNavigation, Nullable`1 animated) in D:aPrismPrismsrcMauiPrism.MauiNavigationPageNavigationService.cs:line 486
[DOTNET]    at Prism.Navigation.PageNavigationService.NavigateAsync(Uri uri, INavigationParameters parameters) in D:aPrismPrismsrcMauiPrism.MauiNavigationPageNavigationService.cs:line 378
**Microsoft.Maui.Controls.InvalidNavigationException:** 'Expected Navigation Failed. No Root Window has been created.'

We’ve been through each dependency on the AppInitPage to ensure that the dependencies and services that it’s trying to use are all built out. We should then expect that the constructor of the AppInitPage is called, however this is not happening and thus the navigation keeps failing. The same MauiProgram (except it uses OnAppStart instead of CreateWindow) is at use in another app and works without issues.

New contributor

Matt_Ba is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật