private void Invalidate(ItemLevelCachePart part) { InitializeSettings(part); foreach (var settings in part.ItemLevelCacheSettings) { var displayType = settings.Key; switch (settings.Value.InvalidationAction) { case ItemLevelCacheInvalidationAction.Evict: mCacheService.RemoveByTag(ItemLevelCacheTag.For(part, displayType)); break; case ItemLevelCacheInvalidationAction.PreRender: var shape = mContentManager.BuildDisplay(part.ContentItem, displayType); shape.BypassDonutTokenization = true; var markup = (string)mShapeDisplay.Display(shape); var cacheItem = new ItemLevelCacheItem(markup); mCacheService.RemoveByTag(ItemLevelCacheTag.For(part, displayType)); // Give the markup to the item-level cache service which will cache it if required. mItemLevelCacheService.CacheItem(part.ContentItem, displayType, cacheItem); break; } } }
private void InitializeSettings(ItemLevelCachePart part) { part.CompositeCacheKeyProviders = mCompositeCacheKeyProviderList.OrderBy(p => p.Name); // Seed the definition dictionary based on the definition of the content type (if required). var contentTypeSettings = part.Settings.GetModel <Dictionary <string, ItemLevelCacheSettings> >(Constants.ContentTypeDefinitionSettingsKey); if (contentTypeSettings != null) { part.ItemLevelCacheSettings = part.ItemLevelCacheSettings .Where(kvp => !kvp.Value.InheritDefaultSettings) // Exclude any saved settings where they shouldn't override the default settings... .ToDictionary(kvp => kvp.Key, kvp => kvp.Value) .Merge(contentTypeSettings); // ...because the default settings will then be added in here. part.ContentTypeCacheSettings = contentTypeSettings; } var defaultSettings = new Dictionary <string, ItemLevelCacheSettings>() { { "Detail", new ItemLevelCacheSettings() } }; // Always ensure there is at least one display type configured. if (!part.ItemLevelCacheSettings.Any()) { part.ItemLevelCacheSettings = defaultSettings; } if (!part.ContentTypeCacheSettings.Any()) { part.ContentTypeCacheSettings = defaultSettings; } PopulateCompositeCacheKeyProviders(part.ItemLevelCacheSettings); PopulateCompositeCacheKeyProviders(part.ContentTypeCacheSettings); }