{"record":{"id":"167dfb55c8d2d342","repo":"dotnet/wpf","slug":"sr-missingnameresolver","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/NameReferenceConverter.cs","lineNumber":31,"sourceCode":"    {\n        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)\n        {\n            if (sourceType == typeof(string))\n            {\n                return true;\n            }\n\n            return base.CanConvertFrom(context, sourceType);\n        }\n\n        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)\n        {\n            ArgumentNullException.ThrowIfNull(context);\n\n            var nameResolver = (IXamlNameResolver)context.GetService(typeof(IXamlNameResolver));\n            if (nameResolver is null)\n            {\n                throw new InvalidOperationException(SR.MissingNameResolver);\n            }\n\n            string name = value as string;\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","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Windows/Markup/NameReferenceConverter.cs#L13-L49","documentation":"NameReferenceConverter.ConvertFrom throws InvalidOperationException (SR.MissingNameResolver) when the ITypeDescriptorContext's GetService(typeof(IXamlNameResolver)) returns null. Resolving a string name to an object requires an IXamlNameResolver service from the XAML ambient service provider; without it the converter cannot function. This indicates the converter is being used outside a proper XAML name-resolution context.","triggerScenarios":"Calling ConvertFrom with a context whose GetService(typeof(IXamlNameResolver)) returns null — e.g. a plain TypeDescriptor context or a custom service provider that does not supply the XAML name resolver.","commonSituations":"Invoking the converter outside XAML parsing (designer tools, unit tests with stub contexts); custom IXamlServiceProvider implementations missing service registrations; using the converter during deserialization phases before name scope services are attached.","solutions":["Ensure ConvertFrom is invoked with an ITypeDescriptorContext backed by a real XAML parser/builder context that provides IXamlNameResolver.","In tests or custom hosts, register a mock IXamlNameResolver via the context's GetService.","Fall back to a different conversion path if name resolution services are unavailable."],"exampleFix":"// before\nconverter.ConvertFrom(new PlainTypeDescriptorContext(), culture, \"myName\"); // no IXamlNameResolver\n// after\nvar ctx = new XamlTypeDescriptorContext(serviceProviderWithXamlNameResolver);\nconverter.ConvertFrom(ctx, culture, \"myName\");","handlingStrategy":"type-guard","validationCode":"var nameResolver = context?.GetService(typeof(IXamlNameResolver));\nif (nameResolver is null) throw new InvalidOperationException(\"IXamlNameResolver service unavailable in this context\");","typeGuard":"bool CanConvertNames(ITypeDescriptorContext ctx) => ctx?.GetService(typeof(IXamlNameResolver)) is IXamlNameResolver;","tryCatchPattern":"try { var obj = converter.ConvertFrom(context, culture, value); }\ncatch (InvalidOperationException ex) when (ex.Message == SR.MissingNameResolver) { /* fall back to non-XAML conversion */ }","preventionTips":["Only use NameReferenceConverter inside a real XAML parser/builder context.","In test harnesses, register a mock IXamlNameResolver on the context.","Probe GetService(typeof(IXamlNameResolver)) once before running batch conversions."],"tags":["missing-service","xaml","name-resolution","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-21T21:30:21.729Z"}