private CacheValues GetCacheValues(PropertyCacheLevel cacheLevel)
        {
            CacheValues cacheValues;

            switch (cacheLevel)
            {
            case PropertyCacheLevel.None:
                // never cache anything
                cacheValues = new CacheValues();
                break;

            case PropertyCacheLevel.Element:
                // cache within the property object itself, ie within the content object
                cacheValues = _cacheValues ?? (_cacheValues = new CacheValues());
                break;

            case PropertyCacheLevel.Elements:
                // cache within the elements  cache, depending...
                var snapshotCache = GetSnapshotCache();
                cacheValues = (CacheValues?)snapshotCache?.Get(ValuesCacheKey, () => new CacheValues()) ?? new CacheValues();
                break;

            case PropertyCacheLevel.Snapshot:
                var publishedSnapshot = _publishedSnapshotAccessor?.GetRequiredPublishedSnapshot();
                // cache within the snapshot cache
                var facadeCache = publishedSnapshot?.SnapshotCache;
                cacheValues = (CacheValues?)facadeCache?.Get(ValuesCacheKey, () => new CacheValues()) ?? new CacheValues();
                break;

            default:
                throw new InvalidOperationException("Invalid cache level.");
            }
            return(cacheValues);
        }
        internal IPublishedContent CreateFromCacheValues(CacheValues cacheValues)
        {
            var content = new DictionaryPublishedContent(
                cacheValues.Values,
                parentId => parentId < 0 ? null : GetUmbracoMedia(parentId),
                GetChildrenMedia,
                GetProperty,
                cacheValues.XPath, // though, outside of tests, that should be null
                cacheValues.FromExamine
                );

            return(content.CreateModel());
        }
Esempio n. 3
0
        internal IPublishedContent CreateFromCacheValues(CacheValues cacheValues)
        {
            var content = new DictionaryPublishedContent(
                cacheValues.Values,
                parentId => parentId < 0 ? null : GetUmbracoMedia(parentId),
                GetChildrenMedia,
                GetProperty,
                _appCache,
                _variationContextAccessor,
                _contentTypeCache,
                cacheValues.XPath, // though, outside of tests, that should be null
                cacheValues.FromExamine
                );

            return(content.CreateModel(Current.PublishedModelFactory));
        }
Esempio n. 4
0
        private CacheValues GetCacheValues(PropertyCacheLevel cacheLevel)
        {
            CacheValues        cacheValues;
            IPublishedSnapshot publishedSnapshot;
            IAppCache          cache;

            switch (cacheLevel)
            {
            case PropertyCacheLevel.None:
                // never cache anything
                cacheValues = new CacheValues();
                break;

            case PropertyCacheLevel.Element:
                // cache within the property object itself, ie within the content object
                cacheValues = _cacheValues ?? (_cacheValues = new CacheValues());
                break;

            case PropertyCacheLevel.Elements:
                // cache within the elements cache, unless previewing, then use the snapshot or
                // elements cache (if we don't want to pollute the elements cache with short-lived
                // data) depending on settings
                // for members, always cache in the snapshot cache - never pollute elements cache
                publishedSnapshot = _publishedSnapshotAccessor.GetRequiredPublishedSnapshot();
                cache             = publishedSnapshot == null
                        ? null
                        : ((_isPreviewing == false || PublishedSnapshotService.FullCacheWhenPreviewing) && (_isMember == false)
                            ? publishedSnapshot.ElementsCache
                            : publishedSnapshot.SnapshotCache);
                cacheValues = GetCacheValues(cache);
                break;

            case PropertyCacheLevel.Snapshot:
                // cache within the snapshot cache
                publishedSnapshot = _publishedSnapshotAccessor.GetRequiredPublishedSnapshot();
                cache             = publishedSnapshot?.SnapshotCache;
                cacheValues       = GetCacheValues(cache);
                break;

            default:
                throw new InvalidOperationException("Invalid cache level.");
            }

            return(cacheValues);
        }
 public CachedTypeFinder(ICache cache, string fieldName, ITypeFinder typeFinder)
 {
     _cacheValues = new CacheValues<IEnumerable<Type>>(cache, fieldName);
     _typeFinder = typeFinder;
 }
 public CachedTypeFinder(ICache cache, string fieldName, ITypeFinder typeFinder)
 {
     _cacheValues = new CacheValues <IEnumerable <Type> >(cache, fieldName);
     _typeFinder  = typeFinder;
 }