Beispiel #1
0
        /// <summary>
        /// Adds an object into cache based on the parameters provided.
        /// </summary>
        /// <param name="tag">The tag.</param>
        /// <param name="name">The name.</param>
        /// <param name="itemPolicy">The itemPolicy object.</param>
        /// <param name="value">The value to store in cache.</param>
        /// <param name="dispatch">The dispatch.</param>
        /// <returns></returns>
        public object Set(object tag, string name, CacheItemPolicy itemPolicy, object value, ServiceCacheByDispatcher dispatch)
        {
            if (itemPolicy == null)
            {
                throw new ArgumentNullException("itemPolicy");
            }
            var updateCallback = itemPolicy.UpdateCallback;

            if (updateCallback != null)
            {
                updateCallback(name, value);
            }
            // item priority
            WebCacheItemPriority cacheItemPriority;

            switch (itemPolicy.Priority)
            {
            case CacheItemPriority.AboveNormal: cacheItemPriority = WebCacheItemPriority.AboveNormal; break;

            case CacheItemPriority.BelowNormal: cacheItemPriority = WebCacheItemPriority.BelowNormal; break;

            case CacheItemPriority.High: cacheItemPriority = WebCacheItemPriority.High; break;

            case CacheItemPriority.Low: cacheItemPriority = WebCacheItemPriority.Low; break;

            case CacheItemPriority.Normal: cacheItemPriority = WebCacheItemPriority.Normal; break;

            case CacheItemPriority.NotRemovable: cacheItemPriority = WebCacheItemPriority.NotRemovable; break;

            default: cacheItemPriority = WebCacheItemPriority.Default; break;
            }
            //
            var removedCallback = (itemPolicy.RemovedCallback == null ? null : new WebCacheItemRemovedCallback((n, v, c) => { itemPolicy.RemovedCallback(n, v); }));

            Cache.Insert(name, value, GetCacheDependency(tag, itemPolicy.Dependency, dispatch), itemPolicy.AbsoluteExpiration, itemPolicy.SlidingExpiration, cacheItemPriority, removedCallback);
            var registration = dispatch.Registration;

            if (registration != null && registration.UseHeaders)
            {
                var headerPolicy = new WebCacheDependency(null, new[] { name });
                var header       = dispatch.Header;
                header.Item = name;
                Cache.Insert(name + "#", header, headerPolicy, itemPolicy.AbsoluteExpiration, itemPolicy.SlidingExpiration, cacheItemPriority, null);
            }
            return(value);
        }
        private SystemCaching.CacheItemPolicy GetCacheDependency(object tag, CacheItemPolicy itemPolicy, ServiceCacheByDispatcher dispatch)
        {
            // item priority
            SystemCaching.CacheItemPriority itemPriority;
            switch (itemPolicy.Priority)
            {
            case CacheItemPriority.NotRemovable:
                itemPriority = SystemCaching.CacheItemPriority.NotRemovable;
                break;

            default:
                itemPriority = SystemCaching.CacheItemPriority.Default;
                break;
            }
            var removedCallback = (itemPolicy.RemovedCallback != null ? new SystemCaching.CacheEntryRemovedCallback(x => { itemPolicy.RemovedCallback(x.CacheItem.Key, x.CacheItem.Value); }) : null);
            var updateCallback  = (itemPolicy.UpdateCallback != null ? new SystemCaching.CacheEntryUpdateCallback(x => { itemPolicy.UpdateCallback(x.UpdatedCacheItem.Key, x.UpdatedCacheItem.Value); }) : null);
            var newItemPolicy   = new SystemCaching.CacheItemPolicy
            {
                AbsoluteExpiration = itemPolicy.AbsoluteExpiration,
                Priority           = itemPriority,
                RemovedCallback    = removedCallback,
                SlidingExpiration  = itemPolicy.SlidingExpiration,
                UpdateCallback     = updateCallback,
            };
            var changeMonitors = GetCacheDependency(tag, itemPolicy.Dependency, dispatch);

            if (changeMonitors != null)
            {
                var list = newItemPolicy.ChangeMonitors;
                foreach (var changeMonitor in changeMonitors)
                {
                    list.Add(changeMonitor);
                }
            }
            return(newItemPolicy);
        }