1、新建Models/Product.cs
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
}
2、新建Models/ProductService.cs
public class ProductService
{
public List<Product> GetProducts()
{
List<Product> result = Builder<Product>
.CreateListOfSize(100)
.Build()
.ToList();
return result;
}
}
3、Models/CacheWrapper.cs
public class CacheWrapper
{
public void PutProducts(List<Product> products)
{
Dictionary<string, object> itemsToCache = new Dictionary<string, object>();
foreach (Product product in products)
{
itemsToCache.Add(product.Name, product);
}
AddCacheItems(itemsToCache);
}
public List<Product> GetProducts(string[] productNames)
{
List<Product> results = new List<Product>();
List<object> cacheItems = GetCacheItems(productNames);
foreach (object cacheItem in cacheItems)
{
results.Add(cacheItem as Product);
}
return results.OrderBy(p => p.Name).ToList();
}
private List<object> GetCacheItems(string[] keys)
{
IDictionaryEnumerator theCache = HttpContext.Current.Cache.GetEnumerator();
List<object> results = new List<object>();
while (theCache.MoveNext())
{
if (keys.Contains(theCache.Key))
results.Add(theCache.Value);
}
return results;
}
private object GetCachItem(string key)
{
if (HttpContext.Current.Cache[key] != null)
return HttpContext.Current.Cache[key];
return null;
}
private void AddCacheItems(Dictionary<string, object> items)
{
foreach (KeyValuePair<string, object> item in items)
{
AddCacheItem(item.Key, item.Value);
}
}
private void AddCacheItem(string key, object item)
{
HttpContext.Current.Cache.Add(key, item, null, //dependencies
DateTime.MaxValue, //absolute expiration
new TimeSpan(0, 0, 2, 0), //sliding expiration
CacheItemPriority.Default, //priority
null); //callback
}
}
4、Global.asax
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
PreLoadProductCatalog();
}
private void PreLoadProductCatalog()
{
List<Product> products = new ProductService().GetProducts();
new CacheWrapper().PutProducts(products);
}
5、Controllers/HomeController.cs
public ActionResult CachedProducts()
{
List<Product> products = new CacheWrapper().GetProducts(new[] {"Name1", "Name5", "Name98", "Name39", "Name88", "Name34"});
return View(products);
}
6、添加CachedProducts的强类型视图,且视图内容为List
ok啦