CacheService.cs 2.3 KB

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