public async Task Initialize(RunDescriptor run, EndpointBehavior endpointBehavior,
IDictionary<Type, string> routingTable, string endpointName)
{
try
{
behavior = endpointBehavior;
scenarioContext = run.ScenarioContext;
runSettings = run.Settings;
var endpointConfigurationFactory = (IEndpointConfigurationFactory)Activator.CreateInstance(endpointBehavior.EndpointBuilderType);
endpointConfigurationFactory.ScenarioContext = run.ScenarioContext;
configuration = endpointConfigurationFactory.Get();
configuration.EndpointName = endpointName;
if (!string.IsNullOrEmpty(configuration.CustomMachineName))
{
RuntimeEnvironment.MachineNameAction = () => configuration.CustomMachineName;
}
//apply custom config settings
if (configuration.GetConfiguration == null)
{
throw new Exception($"Missing EndpointSetup<T> in the constructor of {endpointName} endpoint.");
}
endpointConfiguration = await configuration.GetConfiguration(run, routingTable).ConfigureAwait(false);
RegisterInheritanceHierarchyOfContextInSettings(scenarioContext);
endpointBehavior.CustomConfig.ForEach(customAction => customAction(endpointConfiguration, scenarioContext));
if (configuration.SendOnly)
{
endpointConfiguration.SendOnly();
}
startable = await Endpoint.Create(endpointConfiguration).ConfigureAwait(false);
if (!configuration.SendOnly)
{
var transportInfrastructure = endpointConfiguration.GetSettings().Get<TransportInfrastructure>();
scenarioContext.HasNativePubSubSupport = transportInfrastructure.OutboundRoutingPolicy.Publishes == OutboundRoutingType.Multicast;
}
}
catch (Exception ex)
{
Logger.Error("Failed to initialize endpoint " + endpointName, ex);
throw;
}
}