private static void AddApiBindInfos(ApiBindOn apiBindOn, IEnumerable <ApiBindAttribute> apiBindAttrs, string assemblyName, MethodInfo method) { foreach (var attr in apiBindAttrs) { AddApiBindInfo(apiBindOn, attr, assemblyName, method); } }
//TODO: 添加 ignore 忽略属性 //TODO: 根据模块可以进行忽略或开启 public ApiBindInfo(ApiBindOn apiBindOn, string category, string globalName, string name, Type baseApiControllerType, short baseApiControllerOrder, ApiBindAttribute apiBindAttribute, MethodInfo methodInfo) { ApiBindOn = apiBindOn; Category = category; GlobalName = globalName; Name = name; BaseApiControllerType = baseApiControllerType; BaseApiControllerOrder = baseApiControllerOrder; ApiBindAttribute = apiBindAttribute; MethodInfo = methodInfo; ClassType = methodInfo.DeclaringType; }
private static void AddApiBindInfo(ApiBindOn apiBindOn, ApiBindAttribute apiBindAttr, string assemblyName, MethodInfo method) { var categoryName = apiBindAttr.GetCategoryName(assemblyName); if (!WebApiEngine.ApiAssemblyNames.ContainsKey(categoryName)) { //TODO:可以增加缓存命名空间等更加特殊的前缀 var dynamicCategory = apiBindAttr.GetDynamicCategory(method, assemblyName); var addSuccess = WebApiEngine.ApiAssemblyNames.TryAdd(categoryName, dynamicCategory); if (!addSuccess) { SenparcTrace.SendCustomLog($"动态API未添加成功!", $"信息:[{categoryName} - {dynamicCategory}]"); } } ApiBindInfoCollection.Instance.Add(apiBindOn, categoryName, method, apiBindAttr); }
/// <summary> /// 添加 ApiBindInfo 对象 /// </summary> /// <param name="method"></param> /// <param name="apiBindAttr"></param> public void Add(ApiBindOn apiBindOn, string cagtegory, MethodInfo method, ApiBindAttribute apiBindAttr) { var category = apiBindAttr.GetCategoryName(method); var name = apiBindAttr.GetName(method); var globalName = GetGlobalName(category, name); var finalGlobalName = globalName; var suffix = 0; //确保名称不会重复 while (base.ContainsKey(finalGlobalName)) { suffix++; finalGlobalName = globalName + suffix.ToString("00"); } base.Add(finalGlobalName, new ApiBindInfo(apiBindOn, cagtegory, finalGlobalName, name, apiBindAttr.BaseApiControllerType, apiBindAttr.BaseApiControllerOrder, apiBindAttr, method)); }