diff --git a/src/NServiceBus.IntegrationTesting/EndpointConfigurationExtensions.cs b/src/NServiceBus.IntegrationTesting/EndpointConfigurationExtensions.cs new file mode 100644 index 00000000..2720a0f9 --- /dev/null +++ b/src/NServiceBus.IntegrationTesting/EndpointConfigurationExtensions.cs @@ -0,0 +1,31 @@ +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"); + } + + 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 6402ed6b..ebc36e88 100644 --- a/src/NServiceBus.IntegrationTesting/EndpointTemplate.cs +++ b/src/NServiceBus.IntegrationTesting/EndpointTemplate.cs @@ -14,12 +14,10 @@ public async Task GetConfiguration(RunDescriptor runDescr var settings = configuration.GetSettings(); endpointCustomizationConfiguration.EndpointName = settings.EndpointName(); - configurationBuilderCustomization(configuration); + configuration.RegisterRequiredPipelineBehaviors(endpointCustomizationConfiguration.EndpointName, (IntegrationScenarioContext)runDescriptor.ScenarioContext); + configuration.RegisterScenarioContext(runDescriptor.ScenarioContext); - 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; }