{"record":{"id":"2841e99e76c185a2","repo":"dotnet/wpf","slug":"sr-missingnameresolver-reference","errorCode":null,"errorMessage":"SR.MissingNameResolver","messagePattern":"SR\\.MissingNameResolver","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Windows/Markup/Reference.cs","lineNumber":30,"sourceCode":"    {\n        public Reference()\n        {\n        }\n\n        public Reference(string name)\n        {\n            Name = name;\n        }\n\n        [ConstructorArgument(\"name\")]\n        public string Name { get; set; }\n\n        public override object ProvideValue(IServiceProvider serviceProvider)\n        {\n            ArgumentNullException.ThrowIfNull(serviceProvider);\n            if (serviceProvider.GetService(typeof(IXamlNameResolver)) is not IXamlNameResolver nameResolver)\n            {\n                throw new InvalidOperationException(SR.MissingNameResolver);\n            }\n\n            if (string.IsNullOrEmpty(Name))\n            {\n                throw new InvalidOperationException(SR.MustHaveName);\n            }\n\n            object obj = nameResolver.Resolve(Name);\n            if (obj is null)\n            {\n                string[] names = new string[] { Name };\n                obj = nameResolver.GetFixupToken(names, true);\n            }\n\n            return obj;\n        }\n    }\n}","sourceCodeStart":12,"sourceCodeEnd":48,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Windows/Markup/Reference.cs#L12-L48","documentation":"ReferenceExtension.ProvideValue throws InvalidOperationException (SR.MissingNameResolver) when the serviceProvider does not return an IXamlNameResolver for typeof(IXamlNameResolver). The {x:Reference} markup extension resolves names at parse time and is meaningless without that service. It also null-guards the serviceProvider itself with ArgumentNullException.","triggerScenarios":"Calling ProvideValue with a null serviceProvider (ArgumentNullException), or with a service provider that lacks IXamlNameResolver — e.g. outside XAML parsing, in design-time tooling, or with a custom provider missing the service.","commonSituations":"Evaluating markup extensions programmatically with a minimal IServiceProvider; XAML processed outside the normal loader (preview/render tools); tests instantiating ReferenceExtension and calling ProvideValue with stub providers.","solutions":["Invoke ProvideValue within a XAML load pipeline that supplies IXamlNameResolver (XamlXmlLoader / WPF parser).","For custom hosts, register an IXamlNameResolver implementation in the service provider passed to ProvideValue.","Never pass null serviceProvider; construct a provider exposing at least IXamlNameResolver."],"exampleFix":"// before\nnew ReferenceExtension(\"btnOk\").ProvideValue(new EmptyServiceProvider()); // throws\n// after\nvar provider = new ServiceProviderBuilder().AddXamlNameResolver(nameScope).Build();\nvar value = new ReferenceExtension(\"btnOk\").ProvideValue(provider);","handlingStrategy":"type-guard","validationCode":"if (serviceProvider is null) throw new ArgumentNullException(nameof(serviceProvider));\nif (serviceProvider.GetService(typeof(IXamlNameResolver)) is not IXamlNameResolver) throw new InvalidOperationException(\"IXamlNameResolver missing from provider\");","typeGuard":"bool CanResolveReference(IServiceProvider sp) => sp?.GetService(typeof(IXamlNameResolver)) is IXamlNameResolver;","tryCatchPattern":"try { var v = referenceExt.ProvideValue(provider); }\ncatch (InvalidOperationException ex) when (ex.Message == SR.MissingNameResolver) { /* evaluate outside XAML — resolve by other means */ }","preventionTips":["Evaluate x:Reference only during XAML loading where name scopes exist.","For tooling that walks markup extensions, supply a stub IXamlNameResolver in the service provider.","Never pass a bare or empty IServiceProvider to ProvideValue."],"tags":["missing-service","xaml","xreference","service-provider"],"backgroundTag":"missing-dependency","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-22T01:17:13.364Z"}