ソースを参照

1、Cache没有注册,导致项目中的历史业务代码运行错误

yzp 1 年間 前
コミット
87e9ff6640

+ 9 - 1
Admin.NET/Admin.NET.Core/Cache/CacheSetup.cs

@@ -5,6 +5,7 @@
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
 using Microsoft.Extensions.DependencyInjection.Extensions;
+using NewLife.Caching;
 using NewLife.Caching.Services;
 
 namespace Admin.NET.Core;
@@ -33,6 +34,13 @@ public static class CacheSetup
         }
 
         // 内存缓存兜底。在没有配置Redis时,使用内存缓存,逻辑代码无需修改
-        services.TryAddSingleton<ICacheProvider, CacheProvider>();
+        services.TryAddSingleton<ICacheProvider, CacheProvider>();
+
+        // 很多Service用到依赖注入方式获取ICache,没有处理完这些历史代码之前不要删除这句
+        /* 目前初步看到已在使有和的类型有:
+         * 官方版本有:JobClusterServer、SystemInitjob
+         * 已经发布的业务系统时也有可能用到了,这个要注意
+         * */
+        services.AddSingleton(Cache.Default);
     }
 }

+ 3 - 2
Admin.NET/Admin.NET.Core/Service/Job/JobClusterServer.cs

@@ -1,4 +1,4 @@
-// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
 //
 // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
 //
@@ -51,7 +51,8 @@ public class JobClusterServer : IJobClusterServer
 
             try
             {
-                ICache _cache = App.GetRequiredService<ICache>();
+                //ICache _cache = App.GetRequiredService<ICache>(); //新代码已经取消了注册 ICache 所以最好避免使用这种方法调用
+                ICache _cache = Cache.Default;
                 // 使用分布式锁
                 using (_cache.AcquireLock("lock:JobClusterServer:WaitingForAsync", 1000))
                 {