2011-10-03 20 views
6

Asp.net'deki olası önbelleğe geçirme konusunda biraz şaşırıyorum ve bunları nasıl kullanacağımı bilmiyorum.Önbellek 2 veya daha fazla önbellek öğesinden. (ASP.NET MVC3)

HttpRuntime.Cache ürününe, önbellekteki diğer öğeleri değiştirirsem öğelerin geçersiz kılınması gerektiğini eklemek istiyorum. Bağımlılıklar anahtar tarafından tanımlanmalıdır.

Ben bir işlev böyle istiyorum:

public MyObject LoadFromCache(string itemDescriptor, IEnumerable<string> dependencies) 
{ 
    var ret = HttpRuntime.Cache[itemDescriptor] as MyObject; 
    if (ret == null) 
    { 
     ret = LoadFromDataBase(itemDescriptor); 

     //this is the part I'm not able to figure out. Adding more than one dependency items. 
     var dep = new CacheDependency(); 
     dependencies.ForEach(o => dep.SomeHowAdd(o)); 

     HttpRuntime.Cache.Add(
      itemDescriptor, 
      ret, 
      dependencies, 
      System.Web.Caching.Cache.NoAbsoluteExpiration, 
      System.Web.Caching.Cache.NoSlidingExpiration, 
      Caching.CacheItemPriority.Normal, 
      null 
     ); 
    } 
    return ret; 
} 

Yardım beni bu sefer.

cevap

7

Bunu yapabileceğinizi bilmiyordum, ancak CacheDependency kurucusu here'a bakarsanız, ikinci parametrenin bir önbellek anahtarları dizisi olduğunu görebilirsiniz, böylece önbelleğe alınan öğelerden herhangi biri değişirse, tüm bağımlılık değişecek ve bağımlı öğeniz de geçersiz olacaktır. Bu şekilde çalışmak için başarısız

String[] cacheKeys = new string[]{"cacheKey1","cacheKey2"}; 
var dep = New CacheDependency("", cacheKeys); 

HttpRuntime.Cache.Add(itemDescriptor, ret, dep ...); 
+0

:

Yani kod gibi bir şey olurdu. Birkaç test vakası daha yapmalıyım. – SoonDead

+0

Benim hatam. İşe yarıyor. – SoonDead