using Microsoft.Extensions.Configuration;
using Microsoft.Identity.Client;
using NewLife.Caching.Services;
using NewLife.Caching;
using NewLife.Log;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YY.Admin.Core;
using YY.Admin.Core.Option;
using NewLife.Configuration;
public static class CacheExtensions
{
///
/// 注册缓存服务
///
public static void AddNewLifeCache(this IContainerRegistry containerRegistry,IConfiguration configuration)
{
// 读取配置
var BaseCacheOptions = configuration.GetSection("Cache").Get();
// 注册配置选项
containerRegistry.RegisterInstance(BaseCacheOptions);
// 注册缓存提供器
if (BaseCacheOptions.CacheType == CacheTypeEnum.Redis.ToString())
{
containerRegistry.RegisterSingleton(() =>
{
return CreateRedisCacheProvider(BaseCacheOptions);
});
}
else
{
// 默认使用内存缓存
containerRegistry.RegisterSingleton();
}
// 注册缓存服务
containerRegistry.RegisterSingleton();
}
private static ICacheProvider CreateRedisCacheProvider(BaseCacheOptions options)
{
var redis = new FullRedis
{
Name = "RedisCache",
Tracer = null, // 禁用跟踪器
Log = XTrace.Log // 使用NewLife日志
};
// 初始化Redis
redis.Init(options.Redis.Configuration!);
// 设置前缀
if (!string.IsNullOrEmpty(options.Redis.Prefix))
{
redis.Prefix = options.Redis.Prefix;
}
// 设置最大消息大小
if (options.Redis.MaxMessageSize > 0)
{
redis.MaxMessageSize = options.Redis.MaxMessageSize;
}
//// 测试连接
//if (!redis.Ping())
//{
// throw new Exception("Redis连接失败,请检查配置");
//}
return new RedisCacheProvider { Cache = redis };
}
}