Exemplo n.º 1
0
        public async Task Invoke(HttpContext httpContext)
        {
            Debug.Assert(httpContext != null);

            // local cache for virtual disptach result
            var features        = httpContext.Features;
            var existingFeature = features.Get <IServiceProvidersFeature>();

            // All done if RequestServices is set
            if (existingFeature?.RequestServices != null)
            {
                await _next.Invoke(httpContext);

                return;
            }

            var replacementFeature = new RequestServicesFeature(_scopeFactory);

            try
            {
                features.Set <IServiceProvidersFeature>(replacementFeature);
                await _next.Invoke(httpContext);
            }
            finally
            {
                replacementFeature.Dispose();
                // Restore previous feature state
                features.Set(existingFeature);
            }
        }