你的位置:首页 > ASP.net教程

[ASP.net教程]个人项目框架搭建


1、缓存接口

using System;using System.Collections.Generic;using System.Runtime.Caching;using System.Text.RegularExpressions;namespace EnterpriseFrame.Core.Caching{  /// <summary>  /// Represents a manager for caching between HTTP requests (long term caching)  /// </summary>  public partial class MemoryCacheManager : ICacheManager  {    protected ObjectCache Cache    {      get      {        return MemoryCache.Default;      }    }        /// <summary>    /// Gets or sets the value associated with the specified key.    /// </summary>    /// <typeparam name="T">Type</typeparam>    /// <param name="key">The key of the value to get.</param>    /// <returns>The value associated with the specified key.</returns>    public virtual T Get<T>(string key)    {      return (T)Cache[key];    }    /// <summary>    /// Adds the specified key and object to the cache.    /// </summary>    /// <param name="key">key</param>    /// <param name="data">Data</param>    /// <param name="cacheTime">Cache time</param>    public virtual void Set(string key, object data, int cacheTime)    {      if (data == null)        return;      var policy = new CacheItemPolicy();      policy.AbsoluteExpiration = DateTime.Now + TimeSpan.FromMinutes(cacheTime);      Cache.Add(new CacheItem(key, data), policy);    }    /// <summary>    /// Gets a value indicating whether the value associated with the specified key is cached    /// </summary>    /// <param name="key">key</param>    /// <returns>Result</returns>    public virtual bool IsSet(string key)    {      return (Cache.Contains(key));    }    /// <summary>    /// Removes the value with the specified key from the cache    /// </summary>    /// <param name="key">/key</param>    public virtual void Remove(string key)    {      Cache.Remove(key);    }    /// <summary>    /// Removes items by pattern    /// </summary>    /// <param name="pattern">pattern</param>    public virtual void RemoveByPattern(string pattern)    {      var regex = new Regex(pattern, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase);      var keysToRemove = new List<String>();      foreach (var item in Cache)        if (regex.IsMatch(item.Key))          keysToRemove.Add(item.Key);      foreach (string key in keysToRemove)      {        Remove(key);      }    }    /// <summary>    /// Clear all cache data    /// </summary>    public virtual void Clear()    {      foreach (var item in Cache)        Remove(item.Key);    }  }}

2、扩展

using System;namespace EnterpriseFrame.Core.Caching{  /// <summary>  /// Extensions  /// </summary>  public static class CacheExtensions  {    /// <summary>    /// 获取缓存,不存在则将acquire的结果存入缓存,默认时间60分钟    /// </summary>    /// <typeparam name="T">Type</typeparam>    /// <param name="cacheManager">Cache manager</param>    /// <param name="key">Cache key</param>    /// <param name="acquire">Function to load item if it's not in the cache yet</param>    /// <returns>Cached item</returns>    public static T Get<T>(this ICacheManager cacheManager, string key, Func<T> acquire)    {      return Get(cacheManager, key, 60, acquire);    }    /// <summary>    /// 获取缓存,如果不存在缓存中,执行结果然后将其加载和缓存    /// </summary>    /// <typeparam name="T">缓存类型</typeparam>    /// <param name="cacheManager">Cache manager</param>    /// <param name="key">Cache key</param>    /// <param name="cacheTime">缓存时间 在0分钟-不要缓存</param>    /// <param name="acquire">没有缓存则执行此表达式设置缓存</param>    /// <returns>Cached item</returns>    public static T Get<T>(this ICacheManager cacheManager, string key, int cacheTime, Func<T> acquire)     {      if (cacheManager.IsSet(key))      {        return cacheManager.Get<T>(key);      }      else      {        var result = acquire();        if (cacheTime > 0)          cacheManager.Set(key, result, cacheTime);        return result;      }    }  }}

 

3、MemoryCacheManager实现

using System;using System.Collections.Generic;using System.Runtime.Caching;using System.Text.RegularExpressions;namespace EnterpriseFrame.Core.Caching{  /// <summary>  /// Represents a manager for caching between HTTP requests (long term caching)  /// </summary>  public partial class MemoryCacheManager : ICacheManager  {    protected ObjectCache Cache    {      get      {        return MemoryCache.Default;      }    }        /// <summary>    /// Gets or sets the value associated with the specified key.    /// </summary>    /// <typeparam name="T">Type</typeparam>    /// <param name="key">The key of the value to get.</param>    /// <returns>The value associated with the specified key.</returns>    public virtual T Get<T>(string key)    {      return (T)Cache[key];    }    /// <summary>    /// Adds the specified key and object to the cache.    /// </summary>    /// <param name="key">key</param>    /// <param name="data">Data</param>    /// <param name="cacheTime">Cache time</param>    public virtual void Set(string key, object data, int cacheTime)    {      if (data == null)        return;      var policy = new CacheItemPolicy();      policy.AbsoluteExpiration = DateTime.Now + TimeSpan.FromMinutes(cacheTime);      Cache.Add(new CacheItem(key, data), policy);    }    /// <summary>    /// Gets a value indicating whether the value associated with the specified key is cached    /// </summary>    /// <param name="key">key</param>    /// <returns>Result</returns>    public virtual bool IsSet(string key)    {      return (Cache.Contains(key));    }    /// <summary>    /// Removes the value with the specified key from the cache    /// </summary>    /// <param name="key">/key</param>    public virtual void Remove(string key)    {      Cache.Remove(key);    }    /// <summary>    /// Removes items by pattern    /// </summary>    /// <param name="pattern">pattern</param>    public virtual void RemoveByPattern(string pattern)    {      var regex = new Regex(pattern, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase);      var keysToRemove = new List<String>();      foreach (var item in Cache)        if (regex.IsMatch(item.Key))          keysToRemove.Add(item.Key);      foreach (string key in keysToRemove)      {        Remove(key);      }    }    /// <summary>    /// Clear all cache data    /// </summary>    public virtual void Clear()    {      foreach (var item in Cache)        Remove(item.Key);    }  }}

摘自:NopCommerce框架(http://nopcommerce.codeplex.com/)