using FreeRedis; using Microsoft.Extensions.Caching.Distributed; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Volo.Abp.Caching; namespace Yi.Framework.Caching.FreeRedis { /// /// FreeRedis缓存模块 /// 提供基于FreeRedis的分布式缓存实现 /// [DependsOn(typeof(AbpCachingModule))] public class YiFrameworkCachingFreeRedisModule : AbpModule { private const string RedisEnabledKey = "Redis:IsEnabled"; private const string RedisConfigurationKey = "Redis:Configuration"; /// /// 配置服务 /// /// 服务配置上下文 public override void ConfigureServices(ServiceConfigurationContext context) { var configuration = context.Services.GetConfiguration(); // 检查Redis是否启用 if (!IsRedisEnabled(configuration)) { return; } // 注册Redis服务 RegisterRedisServices(context, configuration); } /// /// 检查Redis是否启用 /// /// 配置 /// 是否启用Redis private static bool IsRedisEnabled(IConfiguration configuration) { var redisEnabled = configuration[RedisEnabledKey]; return redisEnabled.IsNullOrEmpty() || bool.Parse(redisEnabled); } /// /// 注册Redis相关服务 /// /// 服务配置上下文 /// 配置 private static void RegisterRedisServices(ServiceConfigurationContext context, IConfiguration configuration) { var redisConfiguration = configuration[RedisConfigurationKey]; var redisClient = new RedisClient(redisConfiguration); context.Services.AddSingleton(redisClient); context.Services.Replace(ServiceDescriptor.Singleton( new DistributedCache(redisClient))); } } }