{"record":{"id":"57b65c1d4f1dcc05","repo":"lepoco/wpfui","slug":"nameof-serviceprovider-nameof-serviceprovide","errorCode":null,"errorMessage":"{nameof(_serviceProvider)}.{nameof(_serviceProvider.GetService)} returned null for type {viewItem.TargetPageType}.","messagePattern":"(.+?)\\.(.+?) returned null for type (.+?)\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Wpf.Ui/Controls/NavigationView/NavigationView.Navigation.cs","lineNumber":278,"sourceCode":"        if (Journal.Count > 0)\n        {\n            Debug.WriteLineIf(EnableDebugMessages, $\"JOURNAL LAST ELEMENT {Journal[^1]}\");\n        }\n    }\n\n    private object GetNavigationItemInstance(INavigationViewItem viewItem)\n    {\n        if (viewItem.TargetPageType is null)\n        {\n            throw new InvalidOperationException(\n                $\"The {nameof(viewItem)}.{nameof(viewItem.TargetPageType)} property cannot be null.\"\n            );\n        }\n\n        if (_serviceProvider is not null)\n        {\n            return _serviceProvider.GetService(viewItem.TargetPageType)\n                ?? throw new InvalidOperationException(\n                    $\"{nameof(_serviceProvider)}.{nameof(_serviceProvider.GetService)} returned null for type {viewItem.TargetPageType}.\"\n                );\n        }\n\n        if (_pageService is not null)\n        {\n            return _pageService.GetPage(viewItem.TargetPageType)\n                ?? throw new InvalidOperationException(\n                    $\"{nameof(_pageService)}.{nameof(_pageService.GetPage)} returned null for type {viewItem.TargetPageType}.\"\n                );\n        }\n\n        return _cache.Remember(\n                viewItem.TargetPageType,\n                viewItem.NavigationCacheMode,\n                ComputeCachedNavigationInstance\n            )\n            ?? throw new InvalidOperationException(","sourceCodeStart":260,"sourceCodeEnd":296,"githubUrl":"https://github.com/lepoco/wpfui/blob/ffebacd61058170cf63864b7d5aa730cffff848a/src/Wpf.Ui/Controls/NavigationView/NavigationView.Navigation.cs#L260-L296","documentation":"Thrown by NavigationView.GetNavigationItemInstance when an IServiceProvider is configured but GetService(TargetPageType) returns null — i.e. the page type is not registered with the DI container. The navigation system prefers the service provider, so a missing registration aborts rather than falling back to reflection.","triggerScenarios":"Navigating to a NavigationViewItem whose TargetPageType has not been registered in the IServiceProvider passed to NavigationView; the page type was registered under a different interface than the concrete type; transient/scoped registration misconfiguration.","commonSituations":"Forgetting services.AddSingleton<MyPage>() in the DI setup; registering the page against an interface but navigating to the concrete type; conditional registration where the page was not added in the current composition root.","solutions":["Register the page type in the service provider: services.AddTransient<MyPage>() (or AddSingleton/Scoped as appropriate).","Ensure you register the exact Type returned by TargetPageType (concrete type, not just an interface).","If using assembly-scanned registration, verify the page assembly is included in the scan.","Alternatively, do not pass an IServiceProvider and let NavigationView use IPageProvider or reflection."],"exampleFix":"// before\nservices.AddSingleton<INavigationViewPageProvider, PageProvider>();\n// MyPage not registered -> throws\n\n// after\nservices.AddTransient<MyPage>();\nservices.AddSingleton<INavigationViewPageProvider, PageProvider>();","handlingStrategy":"validation","validationCode":"if (_serviceProvider.GetService(viewItem.TargetPageType) is null)\n    throw new InvalidOperationException(\n        $\"Page {viewItem.TargetPageType} is not registered in the service provider.\");","typeGuard":"static bool IsPageRegistered(IServiceProvider sp, Type t) => sp.GetService(t) is not null;","tryCatchPattern":null,"preventionTips":["Register every navigable page type in the DI container.","Register the concrete type that matches TargetPageType, not just an interface.","Use assembly-scan registration to avoid manual omissions."],"tags":["wpf","navigationview","dependency-injection","configuration"],"backgroundTag":null,"analyzedSha":"ffebacd61058170cf63864b7d5aa730cffff848a","analyzedAt":"2026-08-13T21:36:01.370Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}