using System; using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Models; using Umbraco.Core.Models.Membership; using umbraco.cms.businesslogic.member; using Umbraco.Core.Persistence.Repositories; namespace Umbraco.Web.Cache { /// /// A cache refresher to ensure member cache is updated when members change /// /// /// This is not intended to be used directly in your code and it should be sealed but due to legacy code we cannot seal it. /// public class MemberCacheRefresher : TypedCacheRefresherBase { public MemberCacheRefresher(CacheHelper cacheHelper) : base(cacheHelper) { } protected override MemberCacheRefresher Instance { get { return this; } } public override Guid UniqueIdentifier { get { return new Guid(DistributedCache.MemberCacheRefresherId); } } public override string Name { get { return "Clears Member Cache"; } } public override void Refresh(int id) { ClearCache(id); base.Refresh(id); } public override void Remove(int id) { ClearCache(id); base.Remove(id); } public override void Refresh(IMember instance) { ClearCache(instance.Id); base.Refresh(instance); } public override void Remove(IMember instance) { ClearCache(instance.Id); base.Remove(instance); } private void ClearCache(int id) { CacheHelper.RuntimeCache.ClearCacheByKeySearch(CacheKeys.IdToKeyCacheKey); CacheHelper.RuntimeCache.ClearCacheByKeySearch(CacheKeys.KeyToIdCacheKey); CacheHelper.ClearPartialViewCache(); CacheHelper.RuntimeCache. ClearCacheByKeySearch(string.Format("{0}_{1}", CacheKeys.MemberLibraryCacheKey, id)); CacheHelper.RuntimeCache. ClearCacheByKeySearch(string.Format("{0}{1}", CacheKeys.MemberBusinessLogicCacheKey, id)); var memberCache = CacheHelper.IsolatedRuntimeCache.GetCache(); if (memberCache) memberCache.Result.ClearCacheItem(RepositoryBase.GetCacheIdKey(id)); } } }