using System; using System.Collections.Generic; using System.Linq; using System.Web.Caching; namespace Umbraco.Core.Cache { /// /// Extensions for strongly typed access /// internal static class CacheProviderExtensions { public static T GetCacheItem(this IRuntimeCacheProvider provider, string cacheKey, Func getCacheItem, TimeSpan? timeout, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null) { var result = provider.GetCacheItem(cacheKey, () => getCacheItem(), timeout, isSliding, priority, removedCallback, dependentFiles); return result == null ? default(T) : result.TryConvertTo().Result; } public static void InsertCacheItem(this IRuntimeCacheProvider provider, string cacheKey, Func getCacheItem, TimeSpan? timeout = null, bool isSliding = false, CacheItemPriority priority = CacheItemPriority.Normal, CacheItemRemovedCallback removedCallback = null, string[] dependentFiles = null) { provider.InsertCacheItem(cacheKey, () => getCacheItem(), timeout, isSliding, priority, removedCallback, dependentFiles); } public static void ClearCacheObjectTypes(this ICacheProvider provider) { provider.ClearCacheObjectTypes(typeof(T).ToString()); } public static IEnumerable GetCacheItemsByKeySearch(this ICacheProvider provider, string keyStartsWith) { var result = provider.GetCacheItemsByKeySearch(keyStartsWith); return result.Select(x => x.TryConvertTo().Result); } public static T GetCacheItem(this ICacheProvider provider, string cacheKey) { var result = provider.GetCacheItem(cacheKey); if (result == null) { return default(T); } return result.TryConvertTo().Result; } public static T GetCacheItem(this ICacheProvider provider, string cacheKey, Func getCacheItem) { var result = provider.GetCacheItem(cacheKey, () => getCacheItem()); if (result == null) { return default(T); } return result.TryConvertTo().Result; } } }