Exemple #1
0
        /// <summary>
        /// 解析设置
        /// </summary>
        /// <param name="provider"></param>
        /// <param name="settingAttributes"></param>
        /// <exception cref="InvalidOperationException"></exception>
        /// <returns></returns>
        public static IDictionary <string, object> ParseSetting(this IApiContainerProvider provider, IEnumerable <IApiAttribute> settingAttributes)
        {
            if (provider == null)
            {
                throw new ArgumentNullException(nameof(provider));
            }
            if (settingAttributes == null)
            {
                throw new ArgumentNullException(nameof(settingAttributes));
            }
            var parser = GetUsableService(provider.SettingParser, false);

            settingAttributes = settingAttributes.FiltrateAttribute(provider, true);
            if (settingAttributes.Any() == false)
            {
                return(null);
            }
            if (parser == null || settingAttributes.Any(it => it.SettingString != null) == false)
            {
                var settings = new NameDictionary();
                settings.MakeReadOnly();
                return(settings);
            }

            var baseSetting = ParseGeneralSetting(settingAttributes);

            var result = parser.Parse(settingAttributes.Where(a => a.Container != null).Select(a => a.SettingString));

            if (result.Succeed == false)
            {
                throw new InvalidOperationException($"{parser}异常:{result.Error?.ToString() ?? "错误信息丢失"}");
            }
            foreach (var set in result.Settings)
            {
                baseSetting[set.Key] = set.Value;
            }
            baseSetting.MakeReadOnly();
            return(baseSetting);
        }