From 8bd068f4a6ff2693e95eefec51a2fb63dab3e01d Mon Sep 17 00:00:00 2001 From: Chris Ross Date: Wed, 15 Oct 2014 09:39:12 -0700 Subject: [PATCH] Move UseMiddleware from RequestContainer to Http.Extensions. --- .../UseMiddlewareExtensions.cs | 29 +++++++++++++++++++ .../project.json | 6 +++- 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 src/Microsoft.AspNet.Http.Extensions/UseMiddlewareExtensions.cs diff --git a/src/Microsoft.AspNet.Http.Extensions/UseMiddlewareExtensions.cs b/src/Microsoft.AspNet.Http.Extensions/UseMiddlewareExtensions.cs new file mode 100644 index 0000000000..bea600af4b --- /dev/null +++ b/src/Microsoft.AspNet.Http.Extensions/UseMiddlewareExtensions.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Open Technologies, Inc. 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.Linq; +using System.Reflection; +using Microsoft.Framework.DependencyInjection; + +namespace Microsoft.AspNet.Builder +{ + public static class UseMiddlewareExtensions + { + public static IApplicationBuilder UseMiddleware(this IApplicationBuilder builder, params object[] args) + { + return builder.UseMiddleware(typeof(T), args); + } + + public static IApplicationBuilder UseMiddleware(this IApplicationBuilder builder, Type middleware, params object[] args) + { + return builder.Use(next => + { + var typeActivator = builder.ApplicationServices.GetService(); + var instance = typeActivator.CreateInstance(builder.ApplicationServices, middleware, new[] { next }.Concat(args).ToArray()); + var methodinfo = middleware.GetMethod("Invoke", BindingFlags.Instance | BindingFlags.Public); + return (RequestDelegate)methodinfo.CreateDelegate(typeof(RequestDelegate), instance); + }); + } + } +} \ No newline at end of file diff --git a/src/Microsoft.AspNet.Http.Extensions/project.json b/src/Microsoft.AspNet.Http.Extensions/project.json index e4d49e2085..d8391b0906 100644 --- a/src/Microsoft.AspNet.Http.Extensions/project.json +++ b/src/Microsoft.AspNet.Http.Extensions/project.json @@ -1,13 +1,17 @@ { "version": "1.0.0-*", "dependencies": { - "Microsoft.AspNet.Http": "1.0.0-*" + "Microsoft.AspNet.Http": "1.0.0-*", + "Microsoft.Framework.DependencyInjection": "1.0.0-*" }, "frameworks" : { "aspnet50" : { }, "aspnetcore50" : { "dependencies": { + "System.Reflection": "4.0.10-beta-*", + "System.Reflection.Extensions": "4.0.0-beta-*", + "System.Reflection.TypeExtensions": "4.0.0-beta-*", "System.Runtime": "4.0.20-beta-*" } }