mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 15:10:50 +08:00 
			
		
		
		
	Middleware Invoke multi parameters (#288)
This commit is contained in:
		@@ -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;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user