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> >();
 }
Exemple #3
0
        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();
        }