From 1561da7feda122ac01094db636f826271246f5bc Mon Sep 17 00:00:00 2001 From: Mauro Servienti Date: Tue, 2 Jun 2020 21:00:36 +0200 Subject: [PATCH] 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);