mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 12:10:50 +08:00 
			
		
		
		
	add more flexible method to config ocelot pipeline (#880)
This commit is contained in:
		
				
					committed by
					
						
						Thiago Loureiro
					
				
			
			
				
	
			
			
			
						parent
						
							d147910e8e
						
					
				
				
					commit
					1eb092ffbd
				
			@@ -1,22 +1,22 @@
 | 
				
			|||||||
namespace Ocelot.Middleware
 | 
					namespace Ocelot.Middleware
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    using System;
 | 
					 | 
				
			||||||
    using System.Linq;
 | 
					 | 
				
			||||||
    using System.Threading.Tasks;
 | 
					 | 
				
			||||||
    using Microsoft.AspNetCore.Hosting;
 | 
					 | 
				
			||||||
    using Microsoft.Extensions.Options;
 | 
					 | 
				
			||||||
    using System.Diagnostics;
 | 
					 | 
				
			||||||
    using DependencyInjection;
 | 
					    using DependencyInjection;
 | 
				
			||||||
    using Microsoft.AspNetCore.Builder;
 | 
					    using Microsoft.AspNetCore.Builder;
 | 
				
			||||||
 | 
					    using Microsoft.AspNetCore.Hosting;
 | 
				
			||||||
 | 
					    using Microsoft.Extensions.DependencyInjection;
 | 
				
			||||||
 | 
					    using Microsoft.Extensions.Options;
 | 
				
			||||||
    using Ocelot.Configuration;
 | 
					    using Ocelot.Configuration;
 | 
				
			||||||
    using Ocelot.Configuration.Creator;
 | 
					    using Ocelot.Configuration.Creator;
 | 
				
			||||||
    using Ocelot.Configuration.File;
 | 
					    using Ocelot.Configuration.File;
 | 
				
			||||||
    using Ocelot.Configuration.Repository;
 | 
					    using Ocelot.Configuration.Repository;
 | 
				
			||||||
    using Ocelot.Configuration.Setter;
 | 
					    using Ocelot.Configuration.Setter;
 | 
				
			||||||
    using Ocelot.Responses;
 | 
					 | 
				
			||||||
    using Ocelot.Logging;
 | 
					    using Ocelot.Logging;
 | 
				
			||||||
    using Ocelot.Middleware.Pipeline;
 | 
					    using Ocelot.Middleware.Pipeline;
 | 
				
			||||||
    using Microsoft.Extensions.DependencyInjection;
 | 
					    using Ocelot.Responses;
 | 
				
			||||||
 | 
					    using System;
 | 
				
			||||||
 | 
					    using System.Diagnostics;
 | 
				
			||||||
 | 
					    using System.Linq;
 | 
				
			||||||
 | 
					    using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static class OcelotMiddlewareExtensions
 | 
					    public static class OcelotMiddlewareExtensions
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -42,6 +42,30 @@
 | 
				
			|||||||
            return CreateOcelotPipeline(builder, pipelineConfiguration);
 | 
					            return CreateOcelotPipeline(builder, pipelineConfiguration);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public static Task<IApplicationBuilder> UseOcelot(this IApplicationBuilder app, Action<IOcelotPipelineBuilder, OcelotPipelineConfiguration> builderAction)
 | 
				
			||||||
 | 
					            => UseOcelot(app, builderAction, new OcelotPipelineConfiguration());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public static async Task<IApplicationBuilder> UseOcelot(this IApplicationBuilder app, Action<IOcelotPipelineBuilder, OcelotPipelineConfiguration> builderAction, OcelotPipelineConfiguration configuration)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            await CreateConfiguration(app);  // initConfiguration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ConfigureDiagnosticListener(app);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var ocelotPipelineBuilder = new OcelotPipelineBuilder(app.ApplicationServices);
 | 
				
			||||||
 | 
					            builderAction?.Invoke(ocelotPipelineBuilder, configuration ?? new OcelotPipelineConfiguration());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var ocelotDelegate = ocelotPipelineBuilder.Build();
 | 
				
			||||||
 | 
					            app.Properties["analysis.NextMiddlewareName"] = "TransitionToOcelotMiddleware";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            app.Use(async (context, task) =>
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var downstreamContext = new DownstreamContext(context);
 | 
				
			||||||
 | 
					                await ocelotDelegate.Invoke(downstreamContext);
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return app;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private static IApplicationBuilder CreateOcelotPipeline(IApplicationBuilder builder, OcelotPipelineConfiguration pipelineConfiguration)
 | 
					        private static IApplicationBuilder CreateOcelotPipeline(IApplicationBuilder builder, OcelotPipelineConfiguration pipelineConfiguration)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var pipelineBuilder = new OcelotPipelineBuilder(builder.ApplicationServices);
 | 
					            var pipelineBuilder = new OcelotPipelineBuilder(builder.ApplicationServices);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user