0
0

CacheService.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. [Order(80)]
  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 List<dynamic> GetList()
  30. {
  31. var list = new List<dynamic>();
  32. var appConfig = LazyGetRequiredService<AppConfig>();
  33. Assembly[] assemblies = DependencyContext.Default.RuntimeLibraries
  34. .Where(a => appConfig.AssemblyNames.Contains(a.Name))
  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 list;
  55. }
  56. /// <summary>
  57. /// 清除缓存
  58. /// </summary>
  59. /// <param name="cacheKey">缓存键</param>
  60. /// <returns></returns>
  61. public async Task ClearAsync(string cacheKey)
  62. {
  63. Logger.LogWarning($"{User.Id}.{User.UserName}清除缓存[{cacheKey}]");
  64. await Cache.DelByPatternAsync(cacheKey + "*");
  65. }
  66. }