Microsoft.Practices.EnterpriseLibrary.Caching.ICacheManager doesn't have a method / property that allow you retrieve the entire Cache items together. I had such a requirement and found a work around. This is using reflection to get "realCache" field in CacheManager and then looping through Cache.CurrentCacheState.
GetData() retrieves a single item from the Cache.
ICacheManager cacheManager = CacheFactory.GetCacheManager("cacheName"); object cacheItem = cacheManager.GetData("cacheKey");
Retrieving and iterating the entire Cache
using Microsoft.Practices.EnterpriseLibrary.Caching; ... string cacheName = "your-cache-name"; Cache cache; if (TryGetCache(cacheName, out cache)) { foreach (DictionaryEntry cacheEntry in cache.CurrentCacheState) { object key = cacheEntry.Key; CacheItem cacheItem = (CacheItem)cacheEntry.Value; object value = cacheItem.Value; Console.WriteLine("{0}: {1}", key, value) } } private static bool TryGetCache(string cacheName, out Cache cache) { try { ICacheManager _cacheManager = CacheFactory.GetCacheManager(cacheName); cache = (Cache)_cacheManager.GetType().GetField("realCache", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(_cacheManager); } catch (Exception) { cache = null; return false; } return true; }
Thanks for sharing such a great information..Its really nice and informative.
ReplyDeleteDotnet Training in Chennai
Great and good information.
ReplyDeleteDot Net Training in chennai | Dot Net Training in velachery