Telerik.Web.Mvc.WebAssetRegistry.EnsureAsset C# (CSharp) Method

EnsureAsset() private method

private EnsureAsset ( MergedAsset asset, string id ) : WebAssetHolder
asset MergedAsset
id string
return WebAssetHolder
        private WebAssetHolder EnsureAsset(MergedAsset asset, string id)
        {
            string key = "{0}:{1}".FormatWith(GetType().AssemblyQualifiedName, id);
            WebAssetHolder assetHolder;

            using (syncLock.ReadAndWrite())
            {
                assetHolder = GetWebAssetHolder(key);

                if (assetHolder == null)
                {
                    using (syncLock.Write())
                    {
                        assetHolder = GetWebAssetHolder(key);

                        if (assetHolder == null)
                        {
                            List<string> physicalPaths = new List<string>();
                            StringBuilder contentBuilder = new StringBuilder();

                            var files = asset.Directories
                                             .SelectMany(d => d.Files.Select(f => new { Directory = d, File = f }))
                                             .OrderBy(f => f.File.Order);

                            foreach (var pair in files)
                            {
                                string path = "~/" + pair.Directory.Path + "/" + pair.File.Name;

                                string virtualPath = assetLocator.Locate(path, asset.Version);
                                string fileContent = virtualPathProvider.ReadAllText(virtualPath);

                                if (string.Compare(asset.ContentType, "text/css", StringComparison.OrdinalIgnoreCase) == 0)
                                {
                                    string baseDiretory = virtualPathProvider.GetDirectory(virtualPath);

                                    fileContent = ReplaceImagePath(baseDiretory, fileContent);
                                }

                                contentBuilder.AppendLine(fileContent);

                                physicalPaths.Add(pathResolver.Resolve(virtualPath));
                            }

                            assetHolder = new WebAssetHolder { Asset = asset, Content = contentBuilder.ToString() };
                            cacheManager.Insert(key, assetHolder, null, physicalPaths.ToArray());
                        }
                    }
                }
            }

            return assetHolder;
        }