using System.Threading.Tasks; using EntrustSettle.Common; using EntrustSettle.Common.Caches; using EntrustSettle.Common.Option; using Microsoft.Extensions.DependencyInjection; using StackExchange.Redis; namespace EntrustSettle.Extensions.ServiceExtensions; public static class CacheSetup { /// /// 统一注册缓存 /// /// public static void AddCacheSetup(this IServiceCollection services) { //string path = "D:\\EntrustSettle\\委托结算临时日志.txt";s var cacheOptions = App.GetOptions(); cacheOptions.Enabled = AppSettings.app("Redis", "Enabled").ObjToBool(); cacheOptions.ConnectionString = AppSettings.app("Redis", "ConnectionString"); cacheOptions.InstanceName = AppSettings.app("Redis", "InstanceName"); //File.AppendAllText(path, cacheOptions.ToJson() + Environment.NewLine); if (cacheOptions.Enabled) { //File.AppendAllText(path, "添加Redis缓存" + Environment.NewLine); // 配置启动Redis服务,虽然可能影响项目启动速度,但是不能在运行的时候报错,所以是合理的 services.AddSingleton(sp => { //获取连接字符串 var configuration = ConfigurationOptions.Parse(cacheOptions.ConnectionString, true); configuration.ResolveDns = true; return ConnectionMultiplexer.Connect(configuration); }); services.AddSingleton(p => p.GetService() as ConnectionMultiplexer); //使用Redis services.AddStackExchangeRedisCache(options => { options.ConnectionMultiplexerFactory = () => Task.FromResult(App.GetService(false)); if (!cacheOptions.InstanceName.IsNullOrEmpty()) options.InstanceName = cacheOptions.InstanceName; }); services.AddTransient(); } else { //File.AppendAllText(path, "添加内存缓存" + Environment.NewLine); // 使用内存缓存 services.AddMemoryCache(); // 分布式内存缓存 services.AddDistributedMemoryCache(); } services.AddSingleton(); //File.AppendAllText(path, "添加缓存结束" + Environment.NewLine); } }