Esempio n. 1
0
        /// <summary>
        /// 设置缓存项的值。
        /// </summary>
        /// <param name="key">缓存项的原始键值。</param>
        /// <param name="value">缓存项的值。</param>
        /// <param name="methodName">调用当前的方法的方法名称。</param>
        /// <param name="expiration">缓存项的过期信息实例对象:<c>null</c> 表示滑动十分钟过期。</param>
        protected void SetValue(string key, object value, string methodName, Expiration expiration)
        {
            if (ReferenceEquals(key, null))
            {
                throw new ArgumentNullException("[BaseCacheContainer].[SetValue].key");
            }

            if (ReferenceEquals(value, null))
            {
                return;
            }

            expiration = expiration ?? Expiration.CreateInstance();
            if (expiration.Container != null && !ReferenceEquals(expiration.Container, this))
            {
                throw new ArgumentException("[BaseCacheContainer].[SetValue].expiration.Container 已存在,不能添加!");
            }
            expiration.Container = this;

            var notification = expiration.Notification ?? CacheNotification.CreateInstance();

            notification.Key = key;
            notification.SetValue(value, false);

            if (notification.Expiration != null && !ReferenceEquals(notification.Expiration, expiration))
            {
                throw new ArgumentException("[BaseCacheContainer].[SetValue].expiration.[Notification].Expiration 已存在,过期对象处理错误!");
            }
            notification.Expiration = expiration;

            Push(GetKey(key), methodName, expiration);
        }
Esempio n. 2
0
 /// <summary>
 /// 从一个时间间隔创建一个缓存过期设置。
 /// </summary>
 /// <param name="time">从当前到过期的时间间隔。</param>
 /// <param name="notification">缓存过期通知信息:<c>null</c> 表示无通知。</param>
 /// <returns>一个缓存过期设置信息的实例对象。</returns>
 public static Expiration FromSliding(TimeSpan span, CacheNotification notification = null)
 {
     return(new Expiration
     {
         DeadTime = DateTime.Now.Add(span),
         AutoDelay = true,
         Notification = notification ?? CacheNotification.CreateInstance(),
     });
 }
Esempio n. 3
0
 /// <summary>
 /// 从一个绝对时间点创建一个缓存过期设置。
 /// </summary>
 /// <param name="time">过期时间点。</param>
 /// <param name="notification">缓存过期通知信息:<c>null</c> 表示无通知。</param>
 /// <returns>一个缓存过期设置信息的实例对象。</returns>
 public static Expiration FromAbsolute(DateTime time, CacheNotification notification = null)
 {
     return(new Expiration
     {
         DeadTime = time,
         AutoDelay = false,
         Notification = notification ?? CacheNotification.CreateInstance(),
     });
 }