Пример #1
0
        /// <summary>
        /// Gets a processed asset content
        /// </summary>
        /// <param name="assetVirtualPath">Virtual path of asset</param>
        /// <param name="bundleVirtualPath">Virtual path of bundle</param>
        /// <returns>Text content of asset</returns>
        private string GetProcessedAssetContent(string assetVirtualPath, string bundleVirtualPath)
        {
            if (string.IsNullOrWhiteSpace(assetVirtualPath))
            {
                throw new ArgumentException(
                          string.Format(Strings.Common_ArgumentIsEmpty, nameof(assetVirtualPath)),
                          nameof(assetVirtualPath)
                          );
            }

            string content;

            if (_assetHandlerConfig.DisableServerCache)
            {
                IAsset processedAsset = ProcessAsset(assetVirtualPath, bundleVirtualPath);
                content = processedAsset.Content;
            }
            else
            {
                lock (_cacheSynchronizer)
                {
                    string cacheItemKey = GetCacheKey(assetVirtualPath, bundleVirtualPath);
                    object cacheItem    = _cache.Get(cacheItemKey);

                    if (cacheItem != null)
                    {
                        content = (string)cacheItem;
                    }
                    else
                    {
                        IAsset processedAsset = ProcessAsset(assetVirtualPath, bundleVirtualPath);
                        content = processedAsset.Content;

                        DateTime utcStart           = DateTime.UtcNow;
                        DateTime absoluteExpiration = DateTime.Now.AddMinutes(
                            _assetHandlerConfig.ServerCacheDurationInMinutes);
                        TimeSpan slidingExpiration = Cache.NoSlidingExpiration;

                        var fileDependencies = new List <string> {
                            assetVirtualPath
                        };
                        fileDependencies.AddRange(processedAsset.VirtualPathDependencies);

                        var cacheDep = _virtualFileSystemWrapper.GetCacheDependency(assetVirtualPath,
                                                                                    fileDependencies.ToArray(), utcStart);

                        _cache.Insert(cacheItemKey, content, cacheDep,
                                      absoluteExpiration, slidingExpiration, CacheItemPriority.Low, null);
                    }
                }
            }

            return(content);
        }