public TwoLayerCache(ICacheRepository <TKey, TValue> layer1Repository, ICacheRepository <TKey, TValue> layer2Repository, IDataSource <TKey, TValue> dataSource, ICacheNotificationsRouter cacheNotificationsRouter, Func <TKey, string> keySerializer, Func <string, TKey> keyDeserializer, ICacheNotificationsProvider <TKey> layer1NotificationsProvider = null, ICacheNotificationsProvider <TKey> layer2NotificationsProvider = null, TimeSpan?ttl = null ) { if (keySerializer == null) { throw new ArgumentNullException(nameof(keySerializer)); } if (keyDeserializer == null) { throw new ArgumentNullException(nameof(keyDeserializer)); } _layer1Repository = layer1Repository; _layer2Repository = layer2Repository; _dataSource = dataSource; _cacheNotificationsRouter = cacheNotificationsRouter; _keySerializer = keySerializer; _keyDeserializer = keyDeserializer; _layer1NotificationsProvider = layer1NotificationsProvider; _layer2NotificationsProvider = layer2NotificationsProvider; _ttl = ttl; SubscribeToCacheNotifications(); }
public DictionaryRepository(ICacheNotificationsRouter notificationsRouter, Func <TKey, string> keySerializer, Func <string, TKey> keyDeserializer, ConcurrentDictionary <TKey, CacheValueWrapper <TValue> > store = null) { if (keySerializer == null) { throw new ArgumentNullException(nameof(keySerializer)); } if (keyDeserializer == null) { throw new ArgumentNullException(nameof(keyDeserializer)); } _notificationsRouter = notificationsRouter; _keySerializer = keySerializer; _keyDeserializer = keyDeserializer; _store = store ?? new ConcurrentDictionary <TKey, CacheValueWrapper <TValue> >(); }
public RedisCacheRepository(RedisContextProvider context, ICacheNotificationsRouter notificationsRouter, Func <TKey, string> keySerializer, Func <string, TKey> keyDeserializer, TimeSpan?ttl = null) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (keySerializer == null) { throw new ArgumentNullException(nameof(keySerializer)); } if (keyDeserializer == null) { throw new ArgumentNullException(nameof(keyDeserializer)); } _context = context; _notificationsRouter = notificationsRouter; _keySerializer = keySerializer; _keyDeserializer = keyDeserializer; _ttl = ttl; SubscribeToKeySpaceEvents(); }