mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-04-22 06:22:50 +08:00
Middleware Invoke multi parameters (#288)
This commit is contained in:
parent
1e34ac3eec
commit
c79f1ecbf8
@ -94,7 +94,7 @@ namespace Ocelot.Middleware.Pipeline
|
|||||||
private static Func<T, DownstreamContext, IServiceProvider, Task> Compile<T>(MethodInfo methodinfo, ParameterInfo[] parameters)
|
private static Func<T, DownstreamContext, IServiceProvider, Task> Compile<T>(MethodInfo methodinfo, ParameterInfo[] parameters)
|
||||||
{
|
{
|
||||||
var middleware = typeof(T);
|
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 providerArg = Expression.Parameter(typeof(IServiceProvider), "serviceProvider");
|
||||||
var instanceArg = Expression.Parameter(middleware, "middleware");
|
var instanceArg = Expression.Parameter(middleware, "middleware");
|
||||||
|
|
||||||
@ -111,8 +111,7 @@ namespace Ocelot.Middleware.Pipeline
|
|||||||
var parameterTypeExpression = new Expression[]
|
var parameterTypeExpression = new Expression[]
|
||||||
{
|
{
|
||||||
providerArg,
|
providerArg,
|
||||||
Expression.Constant(parameterType, typeof(Type)),
|
Expression.Constant(parameterType, typeof(Type))
|
||||||
Expression.Constant(methodinfo.DeclaringType, typeof(Type))
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var getServiceCall = Expression.Call(GetServiceInfo, parameterTypeExpression);
|
var getServiceCall = Expression.Call(GetServiceInfo, parameterTypeExpression);
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
namespace Ocelot.UnitTests.Middleware
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Ocelot.UnitTests.Middleware
|
||||||
{
|
{
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
@ -80,5 +83,31 @@
|
|||||||
_counter.ShouldBe(1);
|
_counter.ShouldBe(1);
|
||||||
_downstreamContext.HttpContext.Response.StatusCode.ShouldBe(404);
|
_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<MultiParametersInvokeMiddleware>();
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user