Пример #1
0
        public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            if (null == this.Context)
            {
                throw new System.ArgumentException("<optimizedresource> tag requires a valid OptimizationContext. Have you forgotten to set the 'context' attribute ?");
            }

            string cacheKey = $"{this.Context.Identifier}+{this.Output}+{(string)this.Extension}";

            OptimizationResult optimizationResult = await this.Cache.GetOrCreateAsync(cacheKey, async entry =>
            {
                return(await this.OptimizationManager.OptimizeAsync(this.Context, this.Extension));
            });

            output.SuppressOutput();

            IOptimizationResultTagBuilder tagBuilder = this.TagBuilderFactory.GetBuilder(this.Extension);

            foreach (var asset in optimizationResult)
            {
                HtmlContentBuilder assetContentBuilder = new HtmlContentBuilder();
                await tagBuilder.PopulateHtmlTagAsync(this, context.AllAttributes, asset, assetContentBuilder);

                output.PostElement.AppendHtml(assetContentBuilder);

                // if the asset is written out to a static file
                // we can safely dispose the asset (the content) sine it will be served from a static file
                if (OptimizationTagOutput.StaticFile == this.Output)
                {
                    await asset.DisposeAsync();
                }
            }
        }
 protected virtual async Task RenderAssetAsync(IOptimizationResultTagBuilder optimizationResultTagBuilder, RendererTagAttributes attributes, Asset asset, string extension, IHtmlContentBuilder htmlContentBuilder)
 {
     TagBuilderOptions options = new TagBuilderOptions(extension, OptimizationTagOutput.Tag);
     await optimizationResultTagBuilder.PopulateHtmlTagAsync(options, attributes, asset, htmlContentBuilder);
 }