Exemplo n.º 1
0
        private void AddWithSqlDependency(string key, TValue item, SqlCacheDependency sqlDependency)
        {
            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            if (sqlDependency == null)
            {
                throw new ArgumentNullException(nameof(sqlDependency));
            }

            _Cache.SetObject(key, new CacheItem <TValue>()
            {
                AbsoluteExpiration = DateTime.MinValue,
                SlidingExpiration  = TimeSpan.Zero,
                Item = item
            });

            Policy.Handle <Exception>()
            .RetryForever()
            .Execute(() =>
            {
                // subscribe to sql dependency
                _channel = new ChangeTrackingChannelHelper((ISqlChangeCallback)this).OpenChannel();
                _channel.Subscribe(key, sqlDependency.TableName);
            }
                     );

            // subscribe client for callback
            SubscribeCallback(key, sqlDependency.Callback);
        }
Exemplo n.º 2
0
        public TValue GetOrAdd(string key, Func <TValue> item, SqlCacheDependency sqlDependency)
        {
            var itemFromCache = Get(key);

            if (!EqualityComparer <TValue> .Default.Equals(itemFromCache, default(TValue)))
            {
                return(itemFromCache);
            }

            var result = item();

            AddWithSqlDependency(key, result, sqlDependency);

            return(result);
        }
Exemplo n.º 3
0
        public void Add(string key, TValue item, SqlCacheDependency sqlDependency, string[] tags)
        {
            AddWithSqlDependency(key, item, sqlDependency);

            _Cache.AddTagsToKey(key, tags);
        }
Exemplo n.º 4
0
 public void Add(string key, TValue item, SqlCacheDependency sqlDependency)
 {
     AddWithSqlDependency(key, item, sqlDependency);
 }