Exemple #1
0
 /// <summary>
 /// 初始化API上下文
 /// </summary>
 /// <param name="instance"> api实例类 </param>
 /// <param name="method"> api方法 </param>
 /// <param name="resultProvider"> 返回值提供程序 </param>
 /// <param name="session"> api回话信息 </param>
 /// <param name="logger"> 日志记录器 </param>
 public ApiCallContext(object instance, MethodInfo method, IResultProvider resultProvider, ISession session, ILogger logger)
 {
     _resultProvider = resultProvider ?? throw new ArgumentNullException(nameof(resultProvider));
     ApiInstance     = instance ?? throw new ArgumentNullException(nameof(instance));
     Method          = method;
     Session         = session;
     Parameters      = new NameDictionary();
     Properties      = new NameDictionary();
     Data            = new NameDictionary();
     ID = Guid.NewGuid().ToString("n");
     if (instance is ISupportSession s)
     {
         s.Session = session ?? throw ApiException.NotSupportedSession;
     }
 }
Exemple #2
0
        /// <summary>
        /// 解析通用api特性中的设置
        /// </summary>
        /// <param name="settingAttributes">特性集合</param>
        /// <returns></returns>
        private static NameDictionary ParseGeneralSetting(this IEnumerable <IApiAttribute> settingAttributes)
        {
            var dict = new NameDictionary();

            foreach (var attr in settingAttributes)
            {
                if (attr.Container != null || string.IsNullOrWhiteSpace(attr.SettingString))
                {
                    continue;
                }
                foreach (var set in ParseSetting(attr.SettingString))
                {
                    dict[set.Key] = set.Value;
                }
            }
            return(dict);
        }
Exemple #3
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);
        }