diff --git a/src/Camunda.Worker/CamundaWorkerBuilder.cs b/src/Camunda.Worker/CamundaWorkerBuilder.cs index cbad91d..60973ba 100644 --- a/src/Camunda.Worker/CamundaWorkerBuilder.cs +++ b/src/Camunda.Worker/CamundaWorkerBuilder.cs @@ -49,10 +49,13 @@ public ICamundaWorkerBuilder AddHandler(ExternalTaskDelegate handler, HandlerMet public ICamundaWorkerBuilder ConfigurePipeline(Action configureAction) { Guard.NotNull(configureAction, nameof(configureAction)); - var builder = new PipelineBuilder(Services); - configureAction(builder); - var externalTaskDelegate = builder.Build(PipelineBuilder.RouteAsync); - Services.AddSingleton(new WorkerHandlerDescriptor(externalTaskDelegate)); + Services.AddSingleton(provider => + { + var builder = new PipelineBuilder(provider); + configureAction(builder); + var externalTaskDelegate = builder.Build(PipelineBuilder.RouteAsync); + return new WorkerHandlerDescriptor(externalTaskDelegate); + }); return this; } } diff --git a/src/Camunda.Worker/IPipelineBuilder.cs b/src/Camunda.Worker/IPipelineBuilder.cs index 3e0805a..54e9cd1 100644 --- a/src/Camunda.Worker/IPipelineBuilder.cs +++ b/src/Camunda.Worker/IPipelineBuilder.cs @@ -1,11 +1,10 @@ using System; -using Microsoft.Extensions.DependencyInjection; namespace Camunda.Worker { public interface IPipelineBuilder { - IServiceCollection Services { get; } + IServiceProvider ApplicationServices { get; } IPipelineBuilder Use(Func middleware); diff --git a/src/Camunda.Worker/PipelineBuilder.cs b/src/Camunda.Worker/PipelineBuilder.cs index a3b1670..beeed45 100644 --- a/src/Camunda.Worker/PipelineBuilder.cs +++ b/src/Camunda.Worker/PipelineBuilder.cs @@ -12,12 +12,12 @@ public class PipelineBuilder : IPipelineBuilder private readonly IList> _middlewareList = new List>(); - public PipelineBuilder(IServiceCollection services) + public PipelineBuilder(IServiceProvider serviceProvider) { - Services = services; + ApplicationServices = serviceProvider; } - public IServiceCollection Services { get; } + public IServiceProvider ApplicationServices { get; } public IPipelineBuilder Use(Func middleware) { diff --git a/src/Camunda.Worker/ServiceCollectionExtensions.cs b/src/Camunda.Worker/ServiceCollectionExtensions.cs index 844b192..c8a5b8f 100644 --- a/src/Camunda.Worker/ServiceCollectionExtensions.cs +++ b/src/Camunda.Worker/ServiceCollectionExtensions.cs @@ -25,7 +25,7 @@ public static ICamundaWorkerBuilder AddCamundaWorker( services.TryAddTransient(); services.TryAddTransient(); services.TryAddSingleton(); - services.TryAddSingleton(new WorkerHandlerDescriptor(PipelineBuilder.RouteAsync)); + services.TryAddSingleton(_ => new WorkerHandlerDescriptor(PipelineBuilder.RouteAsync)); services.AddHostedService(provider => new WorkerHostedService(provider, numberOfWorkers)); return new CamundaWorkerBuilder(services, workerId); diff --git a/test/Camunda.Worker.Tests/PipelineBuilderTest.cs b/test/Camunda.Worker.Tests/PipelineBuilderTest.cs index ca9d715..f4d4a32 100644 --- a/test/Camunda.Worker.Tests/PipelineBuilderTest.cs +++ b/test/Camunda.Worker.Tests/PipelineBuilderTest.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Camunda.Worker.Execution; using Microsoft.Extensions.DependencyInjection; using Moq; using Xunit; @@ -12,12 +11,14 @@ namespace Camunda.Worker public class PipelineBuilderTest { private readonly Mock _contextMock = new(); - private readonly IServiceCollection _services = new ServiceCollection(); + private readonly IServiceProvider _serviceProvider; public PipelineBuilderTest() { + var services = new ServiceCollection(); + _serviceProvider = services.BuildServiceProvider(); _contextMock.SetupGet(ctx => ctx.ServiceProvider) - .Returns(_services.BuildServiceProvider()); + .Returns(_serviceProvider); } [Theory] @@ -25,7 +26,7 @@ public PipelineBuilderTest() [InlineData(100)] public async Task TestBuildPipeline(int calls) { - IPipelineBuilder builder = new PipelineBuilder(_services); + IPipelineBuilder builder = new PipelineBuilder(_serviceProvider); Task LastDelegate(IExternalTaskContext context) {