From 5b0c029a97ff24eb863445488fdafa96cab8a310 Mon Sep 17 00:00:00 2001 From: Mauro Servienti Date: Tue, 2 Jun 2020 20:57:48 +0200 Subject: [PATCH 1/3] make sure user config customizations happen last --- src/NServiceBus.IntegrationTesting/EndpointTemplate.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NServiceBus.IntegrationTesting/EndpointTemplate.cs b/src/NServiceBus.IntegrationTesting/EndpointTemplate.cs index 6402ed6b..2901000d 100644 --- a/src/NServiceBus.IntegrationTesting/EndpointTemplate.cs +++ b/src/NServiceBus.IntegrationTesting/EndpointTemplate.cs @@ -14,13 +14,13 @@ public async Task GetConfiguration(RunDescriptor runDescr var settings = configuration.GetSettings(); endpointCustomizationConfiguration.EndpointName = settings.EndpointName(); - configurationBuilderCustomization(configuration); - configuration.Pipeline.Register(new InterceptInvokedHandlers(endpointCustomizationConfiguration.EndpointName, (IntegrationScenarioContext)runDescriptor.ScenarioContext), "Intercept invoked Message Handlers and Sagas"); configuration.Pipeline.Register(new InterceptSendOperations(endpointCustomizationConfiguration.EndpointName, (IntegrationScenarioContext)runDescriptor.ScenarioContext), "Intercept send operations"); configuration.Pipeline.Register(new InterceptPublishOperations(endpointCustomizationConfiguration.EndpointName, (IntegrationScenarioContext)runDescriptor.ScenarioContext), "Intercept publish operations"); configuration.Pipeline.Register(new InterceptReplyOperations(endpointCustomizationConfiguration.EndpointName, (IntegrationScenarioContext)runDescriptor.ScenarioContext), "Intercept reply operations"); + configurationBuilderCustomization(configuration); + return configuration; } From 7c9e8d6ccf84b0e4794f5fe7be8e2d12d729de21 Mon Sep 17 00:00:00 2001 From: Mauro Servienti Date: Tue, 2 Jun 2020 20:59:10 +0200 Subject: [PATCH 2/3] Extract pipeline configuration --- .../EndpointConfigurationExtensions.cs | 16 ++++++++++++++++ .../EndpointTemplate.cs | 5 +---- 2 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 src/NServiceBus.IntegrationTesting/EndpointConfigurationExtensions.cs diff --git a/src/NServiceBus.IntegrationTesting/EndpointConfigurationExtensions.cs b/src/NServiceBus.IntegrationTesting/EndpointConfigurationExtensions.cs new file mode 100644 index 00000000..888d1775 --- /dev/null +++ b/src/NServiceBus.IntegrationTesting/EndpointConfigurationExtensions.cs @@ -0,0 +1,16 @@ +using NServiceBus.AcceptanceTesting; +using NServiceBus.ObjectBuilder; + +namespace NServiceBus.IntegrationTesting +{ + public static class EndpointConfigurationExtensions + { + public static void RegisterRequiredPipelineBehaviors(this EndpointConfiguration builder, string endpointName, IntegrationScenarioContext integrationScenarioContext) + { + builder.Pipeline.Register(new InterceptInvokedHandlers(endpointName, integrationScenarioContext), "Intercept invoked Message Handlers and Sagas"); + builder.Pipeline.Register(new InterceptSendOperations(endpointName, integrationScenarioContext), "Intercept send operations"); + builder.Pipeline.Register(new InterceptPublishOperations(endpointName, integrationScenarioContext), "Intercept publish operations"); + builder.Pipeline.Register(new InterceptReplyOperations(endpointName, integrationScenarioContext), "Intercept reply operations"); + } + } +} diff --git a/src/NServiceBus.IntegrationTesting/EndpointTemplate.cs b/src/NServiceBus.IntegrationTesting/EndpointTemplate.cs index 2901000d..d48b8ac8 100644 --- a/src/NServiceBus.IntegrationTesting/EndpointTemplate.cs +++ b/src/NServiceBus.IntegrationTesting/EndpointTemplate.cs @@ -14,10 +14,7 @@ public async Task GetConfiguration(RunDescriptor runDescr var settings = configuration.GetSettings(); endpointCustomizationConfiguration.EndpointName = settings.EndpointName(); - configuration.Pipeline.Register(new InterceptInvokedHandlers(endpointCustomizationConfiguration.EndpointName, (IntegrationScenarioContext)runDescriptor.ScenarioContext), "Intercept invoked Message Handlers and Sagas"); - configuration.Pipeline.Register(new InterceptSendOperations(endpointCustomizationConfiguration.EndpointName, (IntegrationScenarioContext)runDescriptor.ScenarioContext), "Intercept send operations"); - configuration.Pipeline.Register(new InterceptPublishOperations(endpointCustomizationConfiguration.EndpointName, (IntegrationScenarioContext)runDescriptor.ScenarioContext), "Intercept publish operations"); - configuration.Pipeline.Register(new InterceptReplyOperations(endpointCustomizationConfiguration.EndpointName, (IntegrationScenarioContext)runDescriptor.ScenarioContext), "Intercept reply operations"); + configuration.RegisterRequiredPipelineBehaviors(endpointCustomizationConfiguration.EndpointName, (IntegrationScenarioContext)runDescriptor.ScenarioContext); configurationBuilderCustomization(configuration); From 1561da7feda122ac01094db636f826271246f5bc Mon Sep 17 00:00:00 2001 From: Mauro Servienti Date: Tue, 2 Jun 2020 21:00:36 +0200 Subject: [PATCH 3/3] Ensure ScenarioContext is registered in the container --- .../EndpointConfigurationExtensions.cs | 15 +++++++++++++++ .../EndpointTemplate.cs | 1 + 2 files changed, 16 insertions(+) diff --git a/src/NServiceBus.IntegrationTesting/EndpointConfigurationExtensions.cs b/src/NServiceBus.IntegrationTesting/EndpointConfigurationExtensions.cs index 888d1775..2720a0f9 100644 --- a/src/NServiceBus.IntegrationTesting/EndpointConfigurationExtensions.cs +++ b/src/NServiceBus.IntegrationTesting/EndpointConfigurationExtensions.cs @@ -12,5 +12,20 @@ public static void RegisterRequiredPipelineBehaviors(this EndpointConfiguration builder.Pipeline.Register(new InterceptPublishOperations(endpointName, integrationScenarioContext), "Intercept publish operations"); builder.Pipeline.Register(new InterceptReplyOperations(endpointName, integrationScenarioContext), "Intercept reply operations"); } + + public static void RegisterScenarioContext(this EndpointConfiguration builder, ScenarioContext scenarioContext) + { + builder.RegisterComponents(r => { RegisterInheritanceHierarchyOfContextOnContainer(scenarioContext, r); }); + } + + static void RegisterInheritanceHierarchyOfContextOnContainer(ScenarioContext scenarioContext, IConfigureComponents r) + { + var type = scenarioContext.GetType(); + while (type != typeof(object)) + { + r.RegisterSingleton(type, scenarioContext); + type = type.BaseType; + } + } } } diff --git a/src/NServiceBus.IntegrationTesting/EndpointTemplate.cs b/src/NServiceBus.IntegrationTesting/EndpointTemplate.cs index d48b8ac8..ebc36e88 100644 --- a/src/NServiceBus.IntegrationTesting/EndpointTemplate.cs +++ b/src/NServiceBus.IntegrationTesting/EndpointTemplate.cs @@ -15,6 +15,7 @@ public async Task GetConfiguration(RunDescriptor runDescr endpointCustomizationConfiguration.EndpointName = settings.EndpointName(); configuration.RegisterRequiredPipelineBehaviors(endpointCustomizationConfiguration.EndpointName, (IntegrationScenarioContext)runDescriptor.ScenarioContext); + configuration.RegisterScenarioContext(runDescriptor.ScenarioContext); configurationBuilderCustomization(configuration);