mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 22:50:49 +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)
 | 
					        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;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user