Below is an example how to wrap the SmartCache class in a static Cache wrapper.
Example
public class FileCacheExample
{
public void FileCacheExampleUsage()
{
//Build parameters for the report
Dictionary<string, object> parms = new Dictionary<string, object>();
parms.Add("Month", DateTime.Now.Month);
parms.Add("Year", DateTime.Now.Year);
//Get the cache key based on the report parameters
string cacheKey = Cache.Instance.BuildCacheKey("MonthlySalesReport", parms);
//Get the report from the cache, if it does not exist, call the ReportLogic.MonthlySalesReport, save it to the cache and return it
List<ReportDetail> result = Cache.Instance.Get<List<ReportDetail>>(cacheKey, NetCachingLibraryTest.ReportLogic.MonthlySalesReport, parms);
}
}
//Static wrapper
public static class Cache
{
private static SmartCache _smartCache;
public static FileCacheProvider SecondaryCache { get; set; }
private static void Setup()
{
string cacheDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
"KellermanSoftware",
"NetCachingLibrary",
"FileCacheExample");
SecondaryCache = new FileCacheProvider(cacheDirectory);
SecondaryCache.MaxCacheItems = 400;
SmartConfig config = new SmartConfig(new MemoryCacheProvider(), SecondaryCache);
//Specify UserName and LicenseKey for Licensed Mode
//config.UserName = "my user name";
//config.LicenseKey = "my license key";
_smartCache = new SmartCache(config);
}
public static SmartCache Instance
{
get
{
if (_smartCache == null)
Setup();
return _smartCache;
}
}
}
public static class ReportLogic
{
//Example long running report
public static List<ReportDetail> MonthlySalesReport(Dictionary<string, object> parms)
{
System.Threading.Thread.Sleep(1000);
List<ReportDetail> list = new List<ReportDetail>();
list.Add(new ReportDetail("Midwest", 233457.47m));
list.Add(new ReportDetail("Southern", 234789.88m));
return list;
}
}