diff --git a/src/Ocelot/Middleware/OcelotMiddlewareExtensions.cs b/src/Ocelot/Middleware/OcelotMiddlewareExtensions.cs index 78d32346..a841df5a 100644 --- a/src/Ocelot/Middleware/OcelotMiddlewareExtensions.cs +++ b/src/Ocelot/Middleware/OcelotMiddlewareExtensions.cs @@ -1,22 +1,22 @@ 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 Microsoft.AspNetCore.Builder; + using Microsoft.AspNetCore.Hosting; + using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.Options; using Ocelot.Configuration; using Ocelot.Configuration.Creator; using Ocelot.Configuration.File; using Ocelot.Configuration.Repository; using Ocelot.Configuration.Setter; - using Ocelot.Responses; using Ocelot.Logging; 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 { @@ -42,6 +42,30 @@ return CreateOcelotPipeline(builder, pipelineConfiguration); } + public static Task UseOcelot(this IApplicationBuilder app, Action builderAction) + => UseOcelot(app, builderAction, new OcelotPipelineConfiguration()); + + public static async Task UseOcelot(this IApplicationBuilder app, Action 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) { var pipelineBuilder = new OcelotPipelineBuilder(builder.ApplicationServices);