public async Task Invoke(HttpContext context)
        {
            var routeValues = new RouteValueDictionary();

            if (_isReportingEnabled && _templateMatcher.TryMatch(context.Request.Path, routeValues))
            {
                var keys = _factory.GetMissingResources();

                using (var ms = new MemoryStream())
                {
                    await _formatter.WriteAsync(ms, keys);

                    ms.Position = 0;

                    context.Response.StatusCode  = 200;
                    context.Response.ContentType = _formatter.ContentTypeProduced;

                    await ms.CopyToAsync(context.Response.Body);
                }
            }
            else
            {
                // Call the next delegate/middleware in the pipeline
                await this._next(context);
            }
        }
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            var l = _factory.GetMissingResources().Length;

            output.TagName = l == 0 ? "span" : "a";
            output.Content.SetContent($"{ l } keys missing");
            output.TagMode = TagMode.StartTagAndEndTag;
            if (l >= 0)
            {
                output.Attributes.Add("href", $"/{ _reportPath }");
            }
        }