mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-04-23 00:32: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)
|
||||
{
|
||||
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);
|
||||
|
@ -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<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