public async Task UseMiddlewareWithIMiddlewareThrowsIfMiddlewareFactoryCreateReturnsNull()
        {
            var mockServiceProvider = new DummyServiceProvider();
            var builder             = new ApplicationBuilder(mockServiceProvider);

            builder.UseMiddleware(typeof(Middleware));
            var app       = builder.Build();
            var exception = await Assert.ThrowsAsync <InvalidOperationException>(async() =>
            {
                var context = new DefaultHttpContext();
                var sp      = new DummyServiceProvider();
                sp.AddService(typeof(IMiddlewareFactory), new BadMiddlewareFactory());
                context.RequestServices = sp;
                await app(context);
            });

            Assert.Equal(
                Resources.FormatException_UseMiddlewareUnableToCreateMiddleware(
                    typeof(BadMiddlewareFactory),
                    typeof(Middleware)),
                exception.Message);
        }
        public async Task UseMiddlewareWithIMiddlewareWorks()
        {
            var mockServiceProvider = new DummyServiceProvider();
            var builder             = new ApplicationBuilder(mockServiceProvider);

            builder.UseMiddleware(typeof(Middleware));
            var app               = builder.Build();
            var context           = new DefaultHttpContext();
            var sp                = new DummyServiceProvider();
            var middlewareFactory = new BasicMiddlewareFactory();

            sp.AddService(typeof(IMiddlewareFactory), middlewareFactory);
            context.RequestServices = sp;
            await app(context);

            Assert.True(Assert.IsType <bool>(context.Items["before"]));
            Assert.True(Assert.IsType <bool>(context.Items["after"]));
            Assert.NotNull(middlewareFactory.Created);
            Assert.NotNull(middlewareFactory.Released);
            Assert.IsType <Middleware>(middlewareFactory.Created);
            Assert.IsType <Middleware>(middlewareFactory.Released);
            Assert.Same(middlewareFactory.Created, middlewareFactory.Released);
        }