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)));
}
}
}