/// <inheritdoc />
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            try
            {
                if (this.MemberType != null)
                {
                    var resourceManager = Gu.Localization.ResourceManagers.ForType(this.MemberType);
                    return(CreateBindingExpression(resourceManager, this.Member, serviceProvider));
                }

                if (string.IsNullOrEmpty(this.Member))
                {
                    throw new InvalidOperationException("MarkupExtensionStaticMember");
                }

                var qnk = QualifiedNameAndKey.Parse(this.Member);
                if (qnk.QualifiedName is null || qnk.Key is null)
                {
                    return(string.Format(CultureInfo.InvariantCulture, Resources.UnknownErrorFormat, this.Member));
                }

                var type = serviceProvider.Resolve(qnk.QualifiedName);
                if (type is null)
                {
                    return(string.Format(CultureInfo.InvariantCulture, Resources.MissingResourcesFormat, this.Member));
                }

                var manager = Gu.Localization.ResourceManagers.ForType(type);
                this.Member = qnk.Key;
#pragma warning disable CA1304 // Specify CultureInfo
                if (!manager.HasKey(qnk.Key))
#pragma warning restore CA1304 // Specify CultureInfo
                {
                    return(string.Format(CultureInfo.InvariantCulture, Resources.MissingKeyFormat, this.Member));
                }

                return(CreateBindingExpression(manager, this.Member, serviceProvider));
            }
#pragma warning disable CA1031 // Do not catch general exception types
            catch
#pragma warning restore CA1031 // Do not catch general exception types
            {
                return(string.Format(CultureInfo.InvariantCulture, Resources.UnknownErrorFormat, this.Member));
            }
        }
        /// <inheritdoc />
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            try
            {
                if (this.MemberType != null)
                {
                    var resourceManager = Gu.Localization.ResourceManagers.ForType(this.MemberType);
                    return(CreateBindingExpression(resourceManager, this.Member, serviceProvider));
                }

                if (string.IsNullOrEmpty(this.Member))
                {
                    throw new InvalidOperationException("MarkupExtensionStaticMember");
                }

                var qnk = QualifiedNameAndKey.Parse(this.Member);
                if (qnk.QualifiedName == null || qnk.Key == null)
                {
                    return(string.Format(Resources.UnknownErrorFormat, this.Member));
                }

                var type = serviceProvider.Resolve(qnk.QualifiedName);
                if (type == null)
                {
                    return(string.Format(Resources.MissingResourcesFormat, this.Member));
                }

                var manager = Gu.Localization.ResourceManagers.ForType(type);
                this.Member = qnk.Key;
                if (!manager.HasKey(qnk.Key))
                {
                    return(string.Format(Resources.MissingKeyFormat, this.Member));
                }

                return(CreateBindingExpression(manager, this.Member, serviceProvider));
            }
            catch (Exception)
            {
                return(string.Format(Resources.UnknownErrorFormat, this.Member));
            }
        }