diff --git a/src/Ocelot/Middleware/Pipeline/OcelotPipelineBuilderExtensions.cs b/src/Ocelot/Middleware/Pipeline/OcelotPipelineBuilderExtensions.cs index 422097fc..2469bf7c 100644 --- a/src/Ocelot/Middleware/Pipeline/OcelotPipelineBuilderExtensions.cs +++ b/src/Ocelot/Middleware/Pipeline/OcelotPipelineBuilderExtensions.cs @@ -94,7 +94,7 @@ namespace Ocelot.Middleware.Pipeline private static Func Compile(MethodInfo methodinfo, ParameterInfo[] parameters) { var middleware = typeof(T); - var httpContextArg = Expression.Parameter(typeof(HttpContext), "httpContext"); + var httpContextArg = Expression.Parameter(typeof(DownstreamContext), "downstreamContext"); var providerArg = Expression.Parameter(typeof(IServiceProvider), "serviceProvider"); var instanceArg = Expression.Parameter(middleware, "middleware"); @@ -111,8 +111,7 @@ namespace Ocelot.Middleware.Pipeline var parameterTypeExpression = new Expression[] { providerArg, - Expression.Constant(parameterType, typeof(Type)), - Expression.Constant(methodinfo.DeclaringType, typeof(Type)) + Expression.Constant(parameterType, typeof(Type)) }; var getServiceCall = Expression.Call(GetServiceInfo, parameterTypeExpression); diff --git a/test/Ocelot.UnitTests/Middleware/OcelotPiplineBuilderTests.cs b/test/Ocelot.UnitTests/Middleware/OcelotPiplineBuilderTests.cs index 988d0b21..a6862bec 100644 --- a/test/Ocelot.UnitTests/Middleware/OcelotPiplineBuilderTests.cs +++ b/test/Ocelot.UnitTests/Middleware/OcelotPiplineBuilderTests.cs @@ -1,4 +1,7 @@ -namespace Ocelot.UnitTests.Middleware +using System; +using System.Threading.Tasks; + +namespace Ocelot.UnitTests.Middleware { using System.Collections.Generic; using Microsoft.AspNetCore.Hosting; @@ -80,5 +83,31 @@ _counter.ShouldBe(1); _downstreamContext.HttpContext.Response.StatusCode.ShouldBe(404); } + + [Fact] + public void Middleware_Multi_Parameters_Invoke() + { + var provider = _services.BuildServiceProvider(); + IOcelotPipelineBuilder builder = new OcelotPipelineBuilder(provider); + builder = builder.UseMiddleware(); + var del = builder.Build(); + _downstreamContext = new DownstreamContext(new DefaultHttpContext()); + del.Invoke(_downstreamContext); + } + + private class MultiParametersInvokeMiddleware : OcelotMiddleware + { + private readonly OcelotRequestDelegate _next; + + public MultiParametersInvokeMiddleware(OcelotRequestDelegate next) + { + _next = next; + } + + public Task Invoke(DownstreamContext context, IServiceProvider serviceProvider) + { + return Task.CompletedTask; + } + } } }