diff --git a/src/Infrastructure/BotSharp.Core/BotSharpCoreExtensions.cs b/src/Infrastructure/BotSharp.Core/BotSharpCoreExtensions.cs index 2b0c8dc4d..d801e943b 100644 --- a/src/Infrastructure/BotSharp.Core/BotSharpCoreExtensions.cs +++ b/src/Infrastructure/BotSharp.Core/BotSharpCoreExtensions.cs @@ -51,21 +51,11 @@ private static void AddCacheServices(IServiceCollection services, IConfiguration var cacheSettings = new SharpCacheSettings(); config.Bind("SharpCache", cacheSettings); services.AddSingleton(x => cacheSettings); - services.AddSingleton(); - if (cacheSettings.CacheType == CacheType.RedisCache) + services.AddSingleton(sp => cacheSettings.CacheType switch { - services.AddSingleton(); - } - - services.AddSingleton(); - services.AddSingleton(sp => - { - return cacheSettings.CacheType switch - { - CacheType.RedisCache => sp.GetRequiredService(), - _ => sp.GetRequiredService(), - }; + CacheType.RedisCache => ActivatorUtilities.CreateInstance(sp), + _ => ActivatorUtilities.CreateInstance(sp), }); } diff --git a/src/Infrastructure/BotSharp.Core/Infrastructures/Cache/RedisCacheService.cs b/src/Infrastructure/BotSharp.Core/Infrastructures/Cache/RedisCacheService.cs index 9845098db..1e49bc754 100644 --- a/src/Infrastructure/BotSharp.Core/Infrastructures/Cache/RedisCacheService.cs +++ b/src/Infrastructure/BotSharp.Core/Infrastructures/Cache/RedisCacheService.cs @@ -6,16 +6,16 @@ namespace BotSharp.Core.Infrastructures; public class RedisCacheService : ICacheService { - private readonly IServiceProvider _services; + private readonly IConnectionMultiplexer _redis; - public RedisCacheService() + public RedisCacheService(IConnectionMultiplexer redis) { + _redis = redis; } public async Task GetAsync(string key) { - var redis = _services.GetService(); - var db = redis.GetDatabase(); + var db = _redis.GetDatabase(); var value = await db.StringGetAsync(key); if (value.HasValue) @@ -28,8 +28,7 @@ public RedisCacheService() public async Task GetAsync(string key, Type type) { - var redis = _services.GetService(); - var db = redis.GetDatabase(); + var db = _redis.GetDatabase(); var value = await db.StringGetAsync(key); if (value.HasValue) @@ -43,23 +42,20 @@ public async Task GetAsync(string key, Type type) public async Task SetAsync(string key, T value, TimeSpan? expiry) { - var redis = _services.GetService(); - var db = redis.GetDatabase(); + var db = _redis.GetDatabase(); await db.StringSetAsync(key, JsonConvert.SerializeObject(value), expiry); } public async Task RemoveAsync(string key) { - var redis = _services.GetService(); - var db = redis.GetDatabase(); + var db = _redis.GetDatabase(); await db.KeyDeleteAsync(key); } public async Task ClearCacheAsync(string prefix) { - var redis = _services.GetService(); - var db = redis.GetDatabase(); - var server = redis.GetServer(redis.GetEndPoints().First()); + var db = _redis.GetDatabase(); + var server = _redis.GetServer(_redis.GetEndPoints().First()); const int pageSize = 1000; var keys = server.Keys(pattern: $"{prefix}*", pageSize: pageSize).ToList();