diff --git a/src/Infrastructure/BotSharp.Core/BotSharpCoreExtensions.cs b/src/Infrastructure/BotSharp.Core/BotSharpCoreExtensions.cs index 2444f553..2b0c8dc4 100644 --- a/src/Infrastructure/BotSharp.Core/BotSharpCoreExtensions.cs +++ b/src/Infrastructure/BotSharp.Core/BotSharpCoreExtensions.cs @@ -52,13 +52,21 @@ public static class BotSharpCoreExtensions config.Bind("SharpCache", cacheSettings); services.AddSingleton(x => cacheSettings); services.AddSingleton(); + + if (cacheSettings.CacheType == CacheType.RedisCache) + { + services.AddSingleton(); + } + services.AddSingleton(); services.AddSingleton(sp => - cacheSettings.CacheType switch + { + return cacheSettings.CacheType switch { CacheType.RedisCache => sp.GetRequiredService(), _ => sp.GetRequiredService(), - }); + }; + }); } public static IServiceCollection UsingSqlServer(this IServiceCollection services, IConfiguration config) diff --git a/src/Infrastructure/BotSharp.Core/Infrastructures/Cache/RedisCacheService.cs b/src/Infrastructure/BotSharp.Core/Infrastructures/Cache/RedisCacheService.cs index 149722d7..9845098d 100644 --- a/src/Infrastructure/BotSharp.Core/Infrastructures/Cache/RedisCacheService.cs +++ b/src/Infrastructure/BotSharp.Core/Infrastructures/Cache/RedisCacheService.cs @@ -1,22 +1,21 @@ using BotSharp.Abstraction.Infrastructures; using Newtonsoft.Json; using StackExchange.Redis; -using System.Linq; namespace BotSharp.Core.Infrastructures; public class RedisCacheService : ICacheService { - private IConnectionMultiplexer _redis = null!; + private readonly IServiceProvider _services; - public RedisCacheService(IConnectionMultiplexer redis) + public RedisCacheService() { - _redis = redis; } public async Task GetAsync(string key) { - var db = _redis.GetDatabase(); + var redis = _services.GetService(); + var db = redis.GetDatabase(); var value = await db.StringGetAsync(key); if (value.HasValue) @@ -29,7 +28,8 @@ public class RedisCacheService : ICacheService public async Task GetAsync(string key, Type type) { - var db = _redis.GetDatabase(); + var redis = _services.GetService(); + var db = redis.GetDatabase(); var value = await db.StringGetAsync(key); if (value.HasValue) @@ -43,20 +43,23 @@ public class RedisCacheService : ICacheService public async Task SetAsync(string key, T value, TimeSpan? expiry) { - var db = _redis.GetDatabase(); + var redis = _services.GetService(); + var db = redis.GetDatabase(); await db.StringSetAsync(key, JsonConvert.SerializeObject(value), expiry); } public async Task RemoveAsync(string key) { - var db = _redis.GetDatabase(); + var redis = _services.GetService(); + var db = redis.GetDatabase(); await db.KeyDeleteAsync(key); } public async Task ClearCacheAsync(string prefix) { - var db = _redis.GetDatabase(); - var server = _redis.GetServer(_redis.GetEndPoints().First()); + var redis = _services.GetService(); + var db = redis.GetDatabase(); + var server = redis.GetServer(redis.GetEndPoints().First()); const int pageSize = 1000; var keys = server.Keys(pattern: $"{prefix}*", pageSize: pageSize).ToList();