55using System . Threading . Tasks ;
66using Foundatio . Messaging ;
77using Foundatio . Utility ;
8+ using Foundatio . Utility . Resilience ;
89using Microsoft . Extensions . Logging ;
910using Microsoft . Extensions . Logging . Abstractions ;
1011
1112namespace Foundatio . Caching ;
1213
1314public interface IHybridCacheClient : ICacheClient { }
1415
15- public class HybridCacheClient : IHybridCacheClient , IHaveTimeProvider , IHaveLogger
16+ public class HybridCacheClient : IHybridCacheClient , IHaveTimeProvider , IHaveLogger , IHaveLoggerFactory , IHaveResiliencePipelineProvider
1617{
1718 protected readonly ICacheClient _distributedCache ;
1819 protected readonly IMessageBus _messageBus ;
1920 private readonly string _cacheId = Guid . NewGuid ( ) . ToString ( "N" ) ;
2021 private readonly InMemoryCacheClient _localCache ;
2122 private readonly ILogger _logger ;
23+ private readonly ILoggerFactory _loggerFactory ;
24+ private readonly TimeProvider _timeProvider ;
25+ private readonly IResiliencePipelineProvider _resiliencePipelineProvider ;
2226 private long _localCacheHits ;
2327 private long _invalidateCacheCalls ;
2428
2529 public HybridCacheClient ( ICacheClient distributedCacheClient , IMessageBus messageBus , InMemoryCacheClientOptions localCacheOptions = null , ILoggerFactory loggerFactory = null )
2630 {
27- _logger = loggerFactory ? . CreateLogger < HybridCacheClient > ( ) ?? NullLogger < HybridCacheClient > . Instance ;
31+ _loggerFactory = loggerFactory ?? distributedCacheClient . GetLoggerFactory ( ) ?? localCacheOptions . LoggerFactory ?? NullLoggerFactory . Instance ;
32+ _logger = _loggerFactory . CreateLogger < HybridCacheClient > ( ) ;
33+ _timeProvider = distributedCacheClient . GetTimeProvider ( ) ?? localCacheOptions ? . TimeProvider ?? TimeProvider . System ;
34+ _resiliencePipelineProvider = distributedCacheClient . GetResiliencePipelineProvider ( ) ?? localCacheOptions ? . ResiliencePipelineProvider ;
2835 _distributedCache = distributedCacheClient ;
2936 _messageBus = messageBus ;
3037 _messageBus . SubscribeAsync < InvalidateCache > ( OnRemoteCacheItemExpiredAsync ) . AnyContext ( ) . GetAwaiter ( ) . GetResult ( ) ;
@@ -39,7 +46,9 @@ public HybridCacheClient(ICacheClient distributedCacheClient, IMessageBus messag
3946 public long InvalidateCacheCalls => _invalidateCacheCalls ;
4047
4148 ILogger IHaveLogger . Logger => _logger ;
42- TimeProvider IHaveTimeProvider . TimeProvider => _distributedCache . GetTimeProvider ( ) ;
49+ ILoggerFactory IHaveLoggerFactory . LoggerFactory => _loggerFactory ;
50+ TimeProvider IHaveTimeProvider . TimeProvider => _timeProvider ;
51+ IResiliencePipelineProvider IHaveResiliencePipelineProvider . ResiliencePipelineProvider => _resiliencePipelineProvider ;
4352
4453 private Task OnLocalCacheItemExpiredAsync ( object sender , ItemExpiredEventArgs args )
4554 {
0 commit comments