public static ExternallyManagedContainerHost CreateWithExternallyManagedContainer(EndpointConfiguration endpointConfiguration, IServiceCollection serviceCollection) { var settings = endpointConfiguration.Settings; CheckIfSettingsWhereUsedToCreateAnotherEndpoint(settings); var assemblyScanningComponent = AssemblyScanningComponent.Initialize(settings.Get <AssemblyScanningComponent.Configuration>(), settings); endpointConfiguration.FinalizeConfiguration(assemblyScanningComponent.AvailableTypes); var hostingSettings = settings.Get <HostingComponent.Settings>(); var hostingConfiguration = HostingComponent.PrepareConfiguration(hostingSettings, assemblyScanningComponent, serviceCollection); hostingConfiguration.AddStartupDiagnosticsSection("Container", new { Type = "external" }); var endpointCreator = EndpointCreator.Create(settings, hostingConfiguration); var externallyManagedContainerHost = new ExternallyManagedContainerHost(endpointCreator, hostingConfiguration); return(externallyManagedContainerHost); }
public static ExternallyManagedContainerHost CreateWithExternallyManagedContainer(EndpointConfiguration endpointConfiguration, IConfigureComponents externalContainer) { var settings = endpointConfiguration.Settings; var assemblyScanningComponent = AssemblyScanningComponent.Initialize(settings.Get <AssemblyScanningComponent.Configuration>(), settings); endpointConfiguration.FinalizeConfiguration(assemblyScanningComponent.AvailableTypes); var hostingSettings = settings.Get <HostingComponent.Settings>(); var hostingConfiguration = HostingComponent.PrepareConfiguration(hostingSettings, assemblyScanningComponent, externalContainer); if (hostingSettings.CustomObjectBuilder != null) { throw new InvalidOperationException("An internally managed container has already been configured using 'EndpointConfiguration.UseContainer'. It is not possible to use both an internally managed container and an externally managed container."); } hostingConfiguration.AddStartupDiagnosticsSection("Container", new { Type = "external" }); var endpointCreator = EndpointCreator.Create(settings, hostingConfiguration); var externallyManagedContainerHost = new ExternallyManagedContainerHost(endpointCreator, hostingConfiguration); //for backwards compatibility we need to make the IBuilder available in the container externalContainer.ConfigureComponent(_ => externallyManagedContainerHost.Builder.Value, DependencyLifecycle.SingleInstance); return(externallyManagedContainerHost); }