public async Task <IStartableEndpoint> Initialize() { RegisterCriticalErrorHandler(); var concreteTypes = settings.GetAvailableTypes() .Where(IsConcrete) .ToList(); var featureActivator = BuildFeatureActivator(concreteTypes); ConfigRunBeforeIsFinalized(concreteTypes); var transportInfrastructure = InitializeTransportComponent(); var receiveConfiguration = BuildReceiveConfiguration(transportInfrastructure); var routing = InitializeRouting(transportInfrastructure, receiveConfiguration); var featureStats = featureActivator.SetupFeatures(container, pipelineSettings, routing, receiveConfiguration); settings.AddStartupDiagnosticsSection("Features", featureStats); pipelineConfiguration.RegisterBehaviorsInContainer(container); container.ConfigureComponent(b => settings.Get <Notifications>(), DependencyLifecycle.SingleInstance); var eventAggregator = new EventAggregator(settings.Get <NotificationSubscriptions>()); var pipelineCache = new PipelineCache(builder, settings); var queueBindings = settings.Get <QueueBindings>(); var receiveComponent = CreateReceiveComponent(receiveConfiguration, transportInfrastructure, queueBindings, pipelineCache, eventAggregator); var shouldRunInstallers = settings.GetOrDefault <bool>("Installers.Enable"); if (shouldRunInstallers) { var username = GetInstallationUserName(); if (settings.CreateQueues()) { await receiveComponent.CreateQueuesIfNecessary(queueBindings, username).ConfigureAwait(false); } await RunInstallers(concreteTypes, username).ConfigureAwait(false); } settings.AddStartupDiagnosticsSection("Endpoint", new { Name = settings.EndpointName(), SendOnly = settings.Get <bool>("Endpoint.SendOnly"), NServiceBusVersion = GitFlowVersion.MajorMinorPatch } ); var messageSession = new MessageSession(new RootContext(builder, pipelineCache, eventAggregator)); return(new StartableEndpoint(settings, builder, featureActivator, transportInfrastructure, receiveComponent, criticalError, messageSession)); }
public StartableEndpoint(SettingsHolder settings, IBuilder builder, FeatureActivator featureActivator, PipelineConfiguration pipelineConfiguration, IEventAggregator eventAggregator, TransportInfrastructure transportInfrastructure, CriticalError criticalError) { this.criticalError = criticalError; this.settings = settings; this.builder = builder; this.featureActivator = featureActivator; this.pipelineConfiguration = pipelineConfiguration; this.eventAggregator = eventAggregator; this.transportInfrastructure = transportInfrastructure; pipelineCache = new PipelineCache(builder, settings); messageSession = new MessageSession(new RootContext(builder, pipelineCache, eventAggregator)); }