Beispiel #1
0
 /// <summary>
 /// 将对象放入缓存区。
 /// </summary>
 /// <param name="key">用于之后检索出缓存对象的键名,必需是全局唯一的。</param>
 /// <param name="cachingObject">待放入缓存区的对象。</param>
 /// <param name="expiredPolicy">缓存到期策略。</param>
 public void Put(string key, object cachingObject, CacheExpiredPolicy expiredPolicy)
 {
     _cachedObjects[key] = new CachedObject()
     {
         CachingObject = cachingObject,
         ExpiredPolicy = expiredPolicy
     };
 }
Beispiel #2
0
        /// <summary>
        /// 从缓存区获得需要的数据,如果没有则通过 func 获得需要缓存的数据,并将其放入缓存区。
        /// </summary>
        /// <typeparam name="T">需要缓存数据的类型。</typeparam>
        /// <param name="key">用于在缓存区寻找缓存对象的唯一键名。</param>
        /// <param name="func">用于获取需要缓存的数据。</param>
        /// <param name="expiredPolicy">缓存到期策略。</param>
        /// <returns>缓存的数据。</returns>
        /// <remarks>
        /// 通过该方法可以省掉获取与缓存数据的逻辑代码,只需要指定获取需要缓存数据的逻辑。
        /// <example>
        /// 例如:下面的例子中,将 1 + 2 算的整数值放入缓存区,并从缓存区返回该计算的整数值。
        /// 这样不用每次去计算 1 + 2 这个表达式,直到缓存到期策略判断缓存到期,才重新去计算并存入缓存区。
        /// <code>
        /// int x = Cache.Instance.GetValue&lt;int&gt;("somekey", () =&gt; {
        ///     return 1 + 2;
        /// });
        /// </code>
        /// </example>
        /// </remarks>
        public T GetValue <T>(string key, Func <T> func, CacheExpiredPolicy expiredPolicy)
        {
            var cv = this.Get(key);

            if (cv != null)
            {
                return((T)cv);
            }

            var v = func();

            this.Put(key, v, expiredPolicy);

            return(v);
        }