public override Object AddOrGetExisting(String key, Object value, CacheItemPolicy policy, String regionName = null)
		{
			if (value == null)
			{
				this.Delete(key);
				return (null);
			}
			else
			{
				var item = this.Get(key);

				if (item == null)
				{
					CacheItemRemovedCallback callback = (k, v, r) => policy.RemovedCallback(new CacheEntryRemovedArguments(this, (CacheEntryRemovedReason)(Int32)r, new CacheItem(k, v, regionName)));
					this.Add(key, value, policy.AbsoluteExpiration.LocalDateTime, policy.SlidingExpiration, (System.Web.Caching.CacheItemPriority)(Int32)policy.Priority, callback);
				}

				return (item);
			}
		}
예제 #2
0
파일: WebCache.cs 프로젝트: ashmind/gallery
        private object AddOrInsert(
            Func<string, object, CacheDependency, DateTime, TimeSpan, Web.Caching.CacheItemPriority, CacheItemRemovedCallback, object> action,
            string key, object value, CacheItemPolicy policy, string regionName = null
            )
        {
            var fileNames = new List<string>();
            foreach (var monitor in policy.ChangeMonitors) {
                var fileMonitor = monitor as FileChangeMonitor;
                if (fileMonitor == null)
                    throw new NotImplementedException();

                fileNames.AddRange(fileMonitor.FilePaths);
            }

            var dependency = fileNames.Count > 0
                           ? new CacheDependency(fileNames.ToArray())
                           : null;

            var callback = (CacheItemRemovedCallback)null;
            if (policy.RemovedCallback != null) {
                callback = (removedKey, removedValue, reason) => policy.RemovedCallback(
                    new CacheEntryRemovedArguments(this, reasonMap[reason], new CacheItem(removedKey, removedValue))
                );
            }

            return action(
                key, value, dependency,
                policy.AbsoluteExpiration != ObjectCache.InfiniteAbsoluteExpiration ? policy.AbsoluteExpiration.UtcDateTime : Cache.NoAbsoluteExpiration,
                policy.SlidingExpiration != ObjectCache.NoSlidingExpiration ? policy.SlidingExpiration : Cache.NoSlidingExpiration,
                policy.Priority == Runtime.Caching.CacheItemPriority.NotRemovable
                    ? Web.Caching.CacheItemPriority.NotRemovable
                    : Web.Caching.CacheItemPriority.Default,
                callback
            );
        }