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); }