diff --git a/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs b/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs index a5236022f3..6b523a43dc 100644 --- a/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs +++ b/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs @@ -16,8 +16,9 @@ namespace Volo.Abp.Caching.StackExchangeRedis private static readonly MethodInfo ConnectMethod; private static readonly MethodInfo ConnectAsyncMethod; - protected IDatabase RedisDatabase => RedisDatabaseField.GetValue(this) as IDatabase; - + protected IDatabase RedisDatabase => GetRedisDatabase(); + private IDatabase _redisDatabase; + static AbpRedisCache() { RedisDatabaseField = typeof(RedisCache) @@ -38,12 +39,32 @@ namespace Volo.Abp.Caching.StackExchangeRedis protected virtual void Connect() { + if (GetRedisDatabase() != null) + { + return; + } + ConnectMethod.Invoke(this, Array.Empty()); } protected virtual Task ConnectAsync(CancellationToken token = default) { + if (GetRedisDatabase() != null) + { + return Task.CompletedTask; + } + return (Task) ConnectAsyncMethod.Invoke(this, new object[] {token}); } + + private IDatabase GetRedisDatabase() + { + if (_redisDatabase == null) + { + _redisDatabase = RedisDatabaseField.GetValue(this) as IDatabase; + } + + return _redisDatabase; + } } } \ No newline at end of file