public async Task RequestServicesAreDisposedOnCompleted() { var serviceProvider = new ServiceCollection() .AddTransient <DisposableThing>() .BuildServiceProvider(); var scopeFactory = serviceProvider.GetRequiredService <IServiceScopeFactory>(); DisposableThing instance = null; var middleware = new RequestServicesContainerMiddleware( ctx => { instance = ctx.RequestServices.GetRequiredService <DisposableThing>(); return(Task.CompletedTask); }, scopeFactory); var context = new DefaultHttpContext(); var responseFeature = new TestHttpResponseFeature(); context.Features.Set <IHttpResponseFeature>(responseFeature); await middleware.Invoke(context); Assert.NotNull(context.RequestServices); Assert.Single(responseFeature.CompletedCallbacks); var callback = responseFeature.CompletedCallbacks[0]; await callback.callback(callback.state); Assert.Null(context.RequestServices); Assert.True(instance.Disposed); }
public async Task RequestServicesAreSet() { var serviceProvider = new ServiceCollection() .BuildServiceProvider(); var scopeFactory = serviceProvider.GetRequiredService <IServiceScopeFactory>(); var middleware = new RequestServicesContainerMiddleware( ctx => Task.CompletedTask, scopeFactory); var context = new DefaultHttpContext(); await middleware.Invoke(context); Assert.NotNull(context.RequestServices); }