public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { if (ProviderType == null) { throw new ArgumentNullException(nameof(ProviderType)); } if (!typeof(ITagHelpersProvider).IsAssignableFrom(ProviderType)) { throw new ArgumentException(nameof(ProviderType)); } var instance = ViewContext.HttpContext.RequestServices.GetService(ProviderType) as ITagHelpersProvider; if (instance == null) { throw new ArgumentException(nameof(ProviderType)); } string childContent; output.TagName = string.Empty; using (var providerContext = new TagHelpersProviderContext(instance, ViewContext)) { childContent = output.Content.IsModified ? output.Content.GetContent() : (await output.GetChildContentAsync()).GetContent(); } output.Content.SetHtmlContent(childContent); }
public TagHelpersProviderContext(ITagHelpersProvider provider, ViewContext context) { this.provider = provider; this.context = context; oldProviderContext = context.ViewData[field] as TagHelpersProviderContext ?? new TagHelpersProviderContext(context.HttpContext.RequestServices.GetService <DefaultTagHelpersProvider>()); if (oldProviderContext == provider) { return; } oldProviderContext.provider.UnPrepareViewContext(context); context.ViewData[field] = this; context.ClientValidationEnabled = provider.RequireUnobtrusiveValidation; provider.PrepareViewContext(context); }