From 550b2252ea4f5d44844f6988db05c1aaeed86b35 Mon Sep 17 00:00:00 2001 From: Chris R Date: Wed, 6 May 2015 15:31:16 -0700 Subject: [PATCH] #265 Remove Use extensions that take services. --- .../Extensions/UseExtensions.cs | 120 --------------- .../UseWithServicesTests.cs | 138 ------------------ 2 files changed, 258 deletions(-) delete mode 100644 test/Microsoft.AspNet.Http.Extensions.Tests/UseWithServicesTests.cs diff --git a/src/Microsoft.AspNet.Http.Abstractions/Extensions/UseExtensions.cs b/src/Microsoft.AspNet.Http.Abstractions/Extensions/UseExtensions.cs index b5741c310e..1a14048128 100644 --- a/src/Microsoft.AspNet.Http.Abstractions/Extensions/UseExtensions.cs +++ b/src/Microsoft.AspNet.Http.Abstractions/Extensions/UseExtensions.cs @@ -26,125 +26,5 @@ namespace Microsoft.AspNet.Builder }; }); } - - /// - /// Use middleware defined in-line - /// - /// Per-request service required by middleware - /// - /// A function that handles the request or calls the given next function. - /// - public static IApplicationBuilder Use(this IApplicationBuilder app, Func, TService1, Task> middleware) - { - var applicationServices = app.ApplicationServices; - return app.Use(next => context => - { - var serviceProvider = context.RequestServices ?? context.ApplicationServices ?? applicationServices; - if (serviceProvider == null) - { - throw new Exception("TODO: IServiceProvider is not available"); - } - return middleware( - context, - () => next(context), - GetRequiredService(serviceProvider)); - }); - } - - /// - /// Use middleware defined in-line - /// - /// Per-request service required by middleware - /// Per-request service required by middleware - /// - /// A function that handles the request or calls the given next function. - /// - public static IApplicationBuilder Use(this IApplicationBuilder app, Func, TService1, TService2, Task> middleware) - { - var applicationServices = app.ApplicationServices; - return app.Use(next => context => - { - var serviceProvider = context.RequestServices ?? context.ApplicationServices ?? applicationServices; - if (serviceProvider == null) - { - throw new Exception("TODO: IServiceProvider is not available"); - } - return middleware( - context, - () => next(context), - GetRequiredService(serviceProvider), - GetRequiredService(serviceProvider)); - }); - } - - /// - /// Use middleware defined in-line - /// - /// Per-request service required by middleware - /// Per-request service required by middleware - /// Per-request service required by middleware - /// - /// A function that handles the request or calls the given next function. - /// - public static IApplicationBuilder Use(this IApplicationBuilder app, Func, TService1, TService2, TService3, Task> middleware) - { - var applicationServices = app.ApplicationServices; - return app.Use(next => context => - { - var serviceProvider = context.RequestServices ?? context.ApplicationServices ?? applicationServices; - if (serviceProvider == null) - { - throw new Exception("TODO: IServiceProvider is not available"); - } - return middleware( - context, - () => next(context), - GetRequiredService(serviceProvider), - GetRequiredService(serviceProvider), - GetRequiredService(serviceProvider)); - }); - } - - /// - /// Use middleware defined in-line - /// - /// Per-request service required by middleware - /// Per-request service required by middleware - /// Per-request service required by middleware - /// Per-request service required by middleware - /// - /// A function that handles the request or calls the given next function. - /// - public static IApplicationBuilder Use(this IApplicationBuilder app, Func, TService1, TService2, TService3, TService4, Task> middleware) - { - var applicationServices = app.ApplicationServices; - return app.Use(next => context => - { - var serviceProvider = context.RequestServices ?? context.ApplicationServices ?? applicationServices; - if (serviceProvider == null) - { - throw new Exception("TODO: IServiceProvider is not available"); - } - return middleware( - context, - () => next(context), - GetRequiredService(serviceProvider), - GetRequiredService(serviceProvider), - GetRequiredService(serviceProvider), - GetRequiredService(serviceProvider)); - }); - } - - private static TService GetRequiredService(IServiceProvider serviceProvider) - { - var service = (TService)serviceProvider.GetService(typeof(TService)); - - if (service == null) - { - throw new Exception(string.Format("TODO: No service for type '{0}' has been registered.", typeof(TService))); - } - - return service; - } } } \ No newline at end of file diff --git a/test/Microsoft.AspNet.Http.Extensions.Tests/UseWithServicesTests.cs b/test/Microsoft.AspNet.Http.Extensions.Tests/UseWithServicesTests.cs deleted file mode 100644 index c6fd4207ca..0000000000 --- a/test/Microsoft.AspNet.Http.Extensions.Tests/UseWithServicesTests.cs +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Microsoft.AspNet.Builder; -using Microsoft.Framework.DependencyInjection; -using Xunit; - -namespace Microsoft.AspNet.Http.Extensions.Tests -{ - public class UseWithServicesTests - { - [Fact] - public async Task CallingUseThatAlsoTakesServices() - { - var builder = new ApplicationBuilder(new ServiceCollection() - .AddScoped() - .BuildServiceProvider()); - - ITestService theService = null; - builder.Use(async (ctx, next, testService) => - { - theService = testService; - await next(); - }); - - var app = builder.Build(); - await app(new DefaultHttpContext()); - - Assert.IsType(theService); - } - - [Fact] - public async Task ServicesArePerRequest() - { - var services = new ServiceCollection() - .AddScoped() - .BuildServiceProvider(); - var builder = new ApplicationBuilder(services); - - builder.Use(async (ctx, next) => - { - var serviceScopeFactory = services.GetRequiredService(); - using (var serviceScope = serviceScopeFactory.CreateScope()) - { - var priorApplicationServices = ctx.ApplicationServices; - var priorRequestServices = ctx.ApplicationServices; - ctx.ApplicationServices = services; - ctx.RequestServices = serviceScope.ServiceProvider; - try - { - await next(); - } - finally - { - ctx.ApplicationServices = priorApplicationServices; - ctx.RequestServices = priorRequestServices; - } - } - }); - - var testServicesA = new List(); - builder.Use(async (HttpContext ctx, Func next, ITestService testService) => - { - testServicesA.Add(testService); - await next(); - }); - - var testServicesB = new List(); - builder.Use(async (ctx, next, testService) => - { - testServicesB.Add(testService); - await next(); - }); - - var app = builder.Build(); - await app(new DefaultHttpContext()); - await app(new DefaultHttpContext()); - - Assert.Equal(2, testServicesA.Count); - Assert.IsType(testServicesA[0]); - Assert.IsType(testServicesA[1]); - - Assert.Equal(2, testServicesB.Count); - Assert.IsType(testServicesB[0]); - Assert.IsType(testServicesB[1]); - - Assert.Same(testServicesA[0], testServicesB[0]); - Assert.Same(testServicesA[1], testServicesB[1]); - - Assert.NotSame(testServicesA[0], testServicesA[1]); - Assert.NotSame(testServicesB[0], testServicesB[1]); - } - - [Fact] - public async Task InvokeMethodWillAllowPerRequestServices() - { - var services = new ServiceCollection() - .AddScoped() - .BuildServiceProvider(); - var builder = new ApplicationBuilder(services); - builder.UseMiddleware(); - var app = builder.Build(); - - var ctx1 = new DefaultHttpContext(); - await app(ctx1); - - var testService = ctx1.Items[typeof(ITestService)]; - Assert.IsType(testService); - } - } - - public interface ITestService - { - } - - public class TestService : ITestService - { - } - - public class TestMiddleware - { - RequestDelegate _next; - - public TestMiddleware(RequestDelegate next) - { - _next = next; - } - - public Task Invoke(HttpContext context, ITestService testService) - { - context.Items[typeof(ITestService)] = testService; - return Task.FromResult(0); - } - } -} \ No newline at end of file