CacheService.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using Microsoft.Extensions.DependencyModel;
  2. using Microsoft.Extensions.Logging;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Linq;
  7. using System.Reflection;
  8. using System.Threading.Tasks;
  9. using ZhonTai.Admin.Core.Attributes;
  10. using ZhonTai.Admin.Core.Configs;
  11. using ZhonTai.Admin.Core.Dto;
  12. using ZhonTai.DynamicApi;
  13. using ZhonTai.DynamicApi.Attributes;
  14. using ZhonTai.Admin.Core.Consts;
  15. namespace ZhonTai.Admin.Services.Cache;
  16. /// <summary>
  17. /// 缓存服务
  18. /// </summary>
  19. [DynamicApi(Area = AdminConsts.AreaName)]
  20. public class CacheService : BaseService, ICacheService, IDynamicApi
  21. {
  22. public CacheService()
  23. {
  24. }
  25. /// <summary>
  26. /// 查询列表
  27. /// </summary>
  28. /// <returns></returns>
  29. public IResultOutput GetList()
  30. {
  31. var list = new List<object>();
  32. var appConfig = LazyGetRequiredService<AppConfig>();
  33. Assembly[] assemblies = DependencyContext.Default.RuntimeLibraries
  34. .Where(a => appConfig.AssemblyNames.Contains(a.Name) || a.Name == "ZhonTai.Admin")
  35. .Select(o => Assembly.Load(new AssemblyName(o.Name))).ToArray();
  36. foreach (Assembly assembly in assemblies)
  37. {
  38. var types = assembly.GetExportedTypes().Where(a => a.GetCustomAttribute<ScanCacheKeysAttribute>() != null);
  39. foreach (Type type in types)
  40. {
  41. var fields = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);
  42. foreach (FieldInfo field in fields)
  43. {
  44. var descriptionAttribute = field.GetCustomAttributes(typeof(DescriptionAttribute), false).FirstOrDefault() as DescriptionAttribute;
  45. list.Add(new
  46. {
  47. field.Name,
  48. Value = field.GetRawConstantValue().ToString(),
  49. descriptionAttribute?.Description
  50. });
  51. }
  52. }
  53. }
  54. return ResultOutput.Ok(list);
  55. }
  56. /// <summary>
  57. /// 清除缓存
  58. /// </summary>
  59. /// <param name="cacheKey">缓存键</param>
  60. /// <returns></returns>
  61. public async Task<IResultOutput> ClearAsync(string cacheKey)
  62. {
  63. Logger.LogWarning($"{User.Id}.{User.UserName}清除缓存[{cacheKey}]");
  64. await Cache.DelByPatternAsync(cacheKey);
  65. return ResultOutput.Ok();
  66. }
  67. }