一個數據緩存,一般由數據來源,緩存方案,緩存讀取來完成,現在有了匿名函數,可以把獲取數據 來源變為匿名函數。這樣就可以直接聲明一個緩存:
protected static CacheManager<Company> companyCache = new CacheManager<Company>(new SmsDatabaseCache<Company>(), (key) =>
{
return SmsDatabase.Instance.Context.Company.Where(c => c.ShortNumber == (string)key).SingleOrDefault();
});
SmsDatabaseCache是一個緩存方案,還可以使用SimpleCache,TimeoutCache等實現了ICache接口的類 ,因為我的ICacheManager從ICache繼承,所以還可以實現級連緩存喲,例如:
SmsDatebaseCache是一個依SmsDatabase.Instance.Context的緩存方案,在LinqContextDispose時, 會進行清空數據操作。
SmsDatabaseCache
public class SmsDatabaseCache<TData> : ICache<TData>
{
private Dictionary<object, TData> cache = new Dictionary<object, TData>();
public SmsDatabaseCache()
{
SmsDatabase.Instance.PreDisposing += (s, e) =>
{
cache.Clear();
};
}
public TData Get(object key)
{
return cache[key];
}
public void Set(object key, TData data)
{
cache[key] = data;
}
}