/// <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; } }
/// <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); }
/// <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); }