namespace Admin.NET.Core.Service; /// /// 常量下拉框服务 /// [ApiDescriptionSettings(Name = "常量下拉框服务", Order = 193)] public class ConstSelectorService : IDynamicApiController, ITransient { private readonly IDistributedCache _cache; public ConstSelectorService(IDistributedCache cache) { _cache = cache; } /// /// 获取所有常量下拉框列表 /// /// [HttpGet("/constSelector/allConstSelector")] public async Task GetAllConstSelector() { var key = $"{CacheConst.KeyConstSelector}AllSelector"; var json = await _cache.GetStringAsync(key); if (!string.IsNullOrWhiteSpace(json)) { return json.ToObject>(); } var typeList = await GetAllTypesAsync(); var selectData = typeList.Select(x => new SelectorDto { Name = x.CustomAttributes.ToList().FirstOrDefault()?.ConstructorArguments.ToList().FirstOrDefault().Value?.ToString() ?? x.Name, Code = x.Name }).ToList(); await _cache.SetStringAsync(key, selectData.ToJson()); return selectData; } /// /// 根据类名获取下拉框数据 /// /// /// [HttpGet("/constSelector/constSelector")] public async Task GetConstSelector(string typeName) { var key = $"{CacheConst.KeyConstSelector}{typeName.ToUpper()}"; var json = await _cache.GetStringAsync(key); if (!string.IsNullOrWhiteSpace(json)) { return json.ToObject>(); } var typeList = await GetAllTypesAsync(); var type = typeList.FirstOrDefault(x => x.Name == typeName); var isEnum = type.BaseType.Name == "Enum"; var selectData = type.GetFields()? .Where(isEnum, x => x.FieldType.Name == typeName) .Select(x => new SelectorDto { Name = x.Name, Code = isEnum ? (int)x.GetValue(BindingFlags.Instance) : x.GetValue(BindingFlags.Instance) }).ToList(); await _cache.SetStringAsync(key, selectData.ToJson()); return selectData; } /// /// 获取所有常量 /// /// private async Task> GetAllTypesAsync() { return await Task.Run(() => { var typeList = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(x => x.GetTypes()) .Where(x => x.CustomAttributes.Any(y => y.AttributeType == typeof(EnumSelectorAttribute))) .ToList(); return typeList; }); } }