CacheHelper for interdependant Cache entries in ASP.Net

This class will let you manage a group of cache entries, creating an additionl dependency for each item added.

All of the items from a group of caches can be cleared together. It doesn't replaces the cache, it only affects how items get added.

Using it in an ASP.Net page:

protected void Page_Load(object sender, EventArgs e)
    {
        ShowCacheStuff();
    }
    private void ShowCacheStuff()
    {
       if (Cache["test"] == null)
        {
            CacheHelper.Group("TestGroup").Insert("test", DateTime.Now.ToString());
        }

        Response.Write(Cache["test"]);
        Response.Write("<hr>");
   
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        CacheHelper.Group("TestGroup").Clear();
          ShowCacheStuff();
    }

 

using System;
using System.Web;
using System.Web.Caching;

namespace AndrewSeven.Examples
{
 /// <summary>
 /// Provides a simple way to add interdependant items to the Cache
 /// </summary>
    public class CacheHelper
 {
  private string groupDependencyCacheKey;
        static readonly string fullName = typeof(CacheHelper).FullName;
        static public CacheHelper Group(string name)
  {
   return new CacheHelper(name);
  }
  private CacheHelper(string name)
  {
            groupDependencyCacheKey = fullName + "::" + name;
  }
  public Cache Cache
  {
   get
   {
    return HttpContext.Current.Cache;
   }
  }  
  private void EnsureDependencyItem()
  {
            if (Cache[groupDependencyCacheKey] == null)
   {
                Cache[groupDependencyCacheKey] = DateTime.Now;
   }
  }
  public void Clear()
  {
   Cache[groupDependencyCacheKey] = DateTime.Now;
  }
  static public void Clear(string groupName)
  {
   Group(groupName).Clear();
  }
  public CacheDependency GetDependency(CacheDependency dependency)
  {
   EnsureDependencyItem();
   return new CacheDependency(null,(new string[] {groupDependencyCacheKey}),dependency);
  }
  public CacheDependency GetDependency()
  {
   return GetDependency(null);
  }
  public void Insert(string key,object value)
  {
   Cache.Insert(key,value,GetDependency());
  }
  public void Insert(string key,object value,CacheDependency dependency)
  {
   Cache.Insert(key,value,GetDependency(dependency));
  }
  public void Insert(string key,object value,int durationSeconds)
  {
   Cache.Insert(key,value,GetDependency(),System.DateTime.MaxValue,TimeSpan.FromSeconds(durationSeconds));
  }  
 }
}

No Comments