Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }