示例#1
0
        public Asset Add(Asset asset, bool preventAddToCache = false)
        {
            if (asset == null)
            {
                throw new ArgumentNullException(nameof(asset));
            }

            if (asset.AddOnceToken != null)
            {
                if (_items.Any(x => x.AddOnceToken != null && x.AddOnceToken == asset.AddOnceToken))
                {
                    return(null);
                }
            }

            if (asset.Content != null)
            {
                if (_items.Any(x => x.Content != null && x.Content == asset.Content))
                {
                    return(null);
                }
            }

            if (!preventAddToCache)
            {
                if (RenderingContext.CurrentOrNull != null)
                {
                    Rendering rendering = RenderingContext.CurrentOrNull.Rendering;

                    if (rendering != null && rendering.Caching.Cacheable)
                    {
                        AssetRequirementList cachedRequirements;
                        ID renderingId = rendering.RenderingItem.ID;

                        if (!_seenRenderings.Contains(renderingId))
                        {
                            _seenRenderings.Add(renderingId);
                            cachedRequirements = new AssetRequirementList();
                        }
                        else
                        {
                            cachedRequirements = Cache.Get(renderingId) ?? new AssetRequirementList();
                        }

                        cachedRequirements.Add(asset);
                        Cache.Set(renderingId, cachedRequirements);
                    }
                }
            }

            // Passed the checks, add the requirement.
            _items.Add(asset);
            return(asset);
        }
        /// <summary>
        /// Adds an AssetRequirement to the page, checking if it hasn't been added already.
        /// </summary>
        /// <param name="requirement">
        /// The AssetRequirement to be added to the page
        /// </param>
        /// <param name="preventAddToCache">
        /// Do not add requirement to cache
        /// </param>
        public void Add(AssetRequirement requirement, bool preventAddToCache = false)
        {
            // If this code block should only be added once per page, check that now.
            if (requirement.AddOnceToken != null)
            {
                if (items.Any(x => x.AddOnceToken != null && x.AddOnceToken == requirement.AddOnceToken))
                {
                    return;
                }
            }

            // If requirement is a file, check it hasn't been added already.
            if (requirement.File != null)
            {
                if (items.Any(x => x.File != null && x.File == requirement.File))
                {
                    return;
                }
            }

            // If rendering is cacheable it requires special attention. We need to make sure asset references
            // are also cached so we can process them elsewhere in the rendering pipeline.
            if (!preventAddToCache)
            {
                if (RenderingContext.Current != null)
                {
                    var rendering = RenderingContext.Current.Rendering;
                    if (rendering != null && rendering.Caching.Cacheable)
                    {
                        AssetRequirementList cachedRequirements;

                        var renderingID = rendering.RenderingItem.ID;

                        // Check if this is the first time we've seen this rendering during this page request
                        // If so, start from fresh with a new list of requirements
                        if (!seenRenderings.Contains(renderingID))
                        {
                            seenRenderings.Add(renderingID);
                            cachedRequirements = new AssetRequirementList();
                        }
                        else
                        {
                            cachedRequirements = Cache.Get(renderingID) ?? new AssetRequirementList();
                        }

                        cachedRequirements.Add(requirement);
                        Cache.Set(renderingID, cachedRequirements);
                    }
                }
            }

            // Passed the checks, add the requirement.
            items.Add(requirement);
        }
        /// <summary>
        /// Adds an AssetRequirement to the page, checking if it hasn't been added already.
        /// </summary>
        /// <param name="requirement">
        /// The AssetRequirement to be added to the page
        /// </param>
        /// <param name="preventAddToCache">
        /// Do not add requirement to cache
        /// </param>
        public void Add(AssetRequirement requirement, bool preventAddToCache = false)
        {
            // If this code block should only be added once per page, check that now.
            if (requirement.AddOnceToken != null)
            {
                if (items.Any(x => x.AddOnceToken != null && x.AddOnceToken == requirement.AddOnceToken))
                {
                    return;
                }
            }

            // If requirement is a file, check it hasn't been added already.
            if (requirement.File != null)
            {
                if (items.Any(x => x.File != null && x.File == requirement.File))
                {
                    return;
                }
            }

            // If rendering is cacheable it requires special attention. We need to make sure asset references
            // are also cached so we can process them elsewhere in the rendering pipeline.
            if (!preventAddToCache)
            {
                if (RenderingContext.Current != null)
                {
                    var rendering = RenderingContext.Current.Rendering;
                    if (rendering != null && rendering.Caching.Cacheable)
                    {
                        AssetRequirementList cachedRequirements;

                        var renderingID = rendering.RenderingItem.ID;

                        // Check if this is the first time we've seen this rendering during this page request
                        // If so, start from fresh with a new list of requirements
                        if (!seenRenderings.Contains(renderingID))
                        {
                            seenRenderings.Add(renderingID);
                            cachedRequirements = new AssetRequirementList();
                        }
                        else
                        {
                            cachedRequirements = Cache.Get(renderingID) ?? new AssetRequirementList();
                        }

                        cachedRequirements.Add(requirement);
                        Cache.Set(renderingID, cachedRequirements);
                    }
                }
            }

            // Passed the checks, add the requirement.
            items.Add(requirement);
        }
示例#4
0
    internal void Add(Asset requirement, bool preventAddToCache = false)
    {
      lock (_items)
      {
        if (requirement.AddOnceToken != null)
        {
          if (this._items.Any(x => x.AddOnceToken != null && x.AddOnceToken == requirement.AddOnceToken))
          {
            return;
          }
        }

        if (requirement.File != null)
        {
          if (this._items.Any(x => x.File != null && x.File == requirement.File))
          {
            return;
          }
        }

        if (!preventAddToCache)
        {
          if (RenderingContext.Current != null)
          {
            var rendering = RenderingContext.Current.Rendering;
            if (rendering != null && rendering.Caching.Cacheable)
            {
              AssetRequirementList cachedRequirements;

              var renderingId = rendering.RenderingItem.ID;

              if (!this._seenRenderings.Contains(renderingId))
              {
                this._seenRenderings.Add(renderingId);
                cachedRequirements = new AssetRequirementList();
              }
              else
              {
                cachedRequirements = _cache.Get(renderingId) ?? new AssetRequirementList();
              }

              cachedRequirements.Add(requirement);
              _cache.Set(renderingId, cachedRequirements);
            }
          }
        }

        // Passed the checks, add the requirement.
        this._items.Add(requirement);
      }
    }
        internal void Add(Asset requirement, bool preventAddToCache = false)
        {
            lock (this._items)
            {
                if (requirement.AddOnceToken != null)
                {
                    if (this._items.Any(x => x.AddOnceToken != null && x.AddOnceToken == requirement.AddOnceToken))
                    {
                        return;
                    }
                }

                if (requirement.File != null)
                {
                    if (this._items.Any(x => x.File != null && x.File == requirement.File))
                    {
                        return;
                    }
                }

                if (!preventAddToCache)
                {
                    if (RenderingContext.Current != null)
                    {
                        var rendering = RenderingContext.Current.Rendering;
                        if (rendering != null && rendering.Caching.Cacheable)
                        {
                            AssetRequirementList cachedRequirements;

                            var renderingId = rendering.RenderingItem.ID;

                            if (!this._seenRenderings.Contains(renderingId))
                            {
                                this._seenRenderings.Add(renderingId);
                                cachedRequirements = new AssetRequirementList();
                            }
                            else
                            {
                                cachedRequirements = _cache.Get(renderingId) ?? new AssetRequirementList();
                            }

                            cachedRequirements.Add(requirement);
                            _cache.Set(renderingId, cachedRequirements);
                        }
                    }
                }

                // Passed the checks, add the requirement.
                this._items.Add(requirement);
            }
        }
示例#6
0
        public void Add(ID renderingID)
        {
            // Check if rendering has already been executed in this page request and if so, no need to add it again.
            if (_seenRenderings.Contains(renderingID))
            {
                return;
            }

            AssetRequirementList list = Cache.Get(renderingID);

            if (list == null)
            {
                return;
            }

            foreach (Asset requirement in list)
            {
                Add(requirement, true);
            }
        }
        private void AddToCache(Asset asset, Rendering rendering)
        {
            if (rendering != null && rendering.Caching.Cacheable)
            {
                AssetRequirementList cachedRequirements;

                var renderingId = rendering.RenderingItem.ID;

                if (!this._seenRenderings.Contains(renderingId))
                {
                    this._seenRenderings.Add(renderingId);
                    cachedRequirements = new AssetRequirementList();
                }
                else
                {
                    cachedRequirements = _cache.Get(renderingId) ?? new AssetRequirementList();
                }

                cachedRequirements.Add(asset);
                _cache.Set(renderingId, cachedRequirements);
            }
        }
 public void Set(ID cacheKey, AssetRequirementList requirementList)
 {
   this.SetObject(cacheKey, requirementList);
 }