public void InitializeWithInternallyManagedContainer() { ownsContainer = true; var container = customContainer; if (container == null) { settings.AddStartupDiagnosticsSection("Container", new { Type = "internal" }); container = new LightInjectObjectBuilder(); } else { var containerType = container.GetType(); settings.AddStartupDiagnosticsSection("Container", new { Type = containerType.FullName, Version = FileVersionRetriever.GetFileVersion(containerType) }); } var commonObjectBuilder = new CommonObjectBuilder(container); ContainerConfiguration = commonObjectBuilder; Builder = commonObjectBuilder; ApplyRegistrations(); }
public static Configuration PrepareConfiguration(Settings settings, AssemblyScanningComponent assemblyScanningComponent, IServiceCollection serviceCollection) { var availableTypes = assemblyScanningComponent.AvailableTypes.Where(t => !t.IsAbstract && !t.IsInterface).ToList(); var configureComponentsAdapter = new CommonObjectBuilder(serviceCollection); var configuration = new Configuration(settings, availableTypes, new CriticalError(settings.CustomCriticalErrorAction), settings.StartupDiagnostics, settings.DiagnosticsPath, settings.HostDiagnosticsWriter, settings.EndpointName, configureComponentsAdapter, settings.InstallationUserName, settings.ShouldRunInstallers); configureComponentsAdapter.ConfigureComponent(() => configuration.HostInformation, DependencyLifecycle.SingleInstance); configureComponentsAdapter.ConfigureComponent(() => configuration.CriticalError, DependencyLifecycle.SingleInstance); foreach (var installerType in availableTypes.Where(t => IsINeedToInstallSomething(t))) { configureComponentsAdapter.ConfigureComponent(installerType, DependencyLifecycle.InstancePerCall); } foreach (var registration in settings.UserRegistrations) { registration(configureComponentsAdapter); } return(configuration); }
void RegisterContainerAdapter(IContainer containerToAdapt) { var b = new CommonObjectBuilder(containerToAdapt); builder = b; container = b; container.ConfigureComponent <IBuilder>(_ => b, DependencyLifecycle.SingleInstance); }
public static async Task <IStartableEndpoint> CreateWithInternallyManagedContainer(EndpointConfiguration endpointConfiguration) { var settings = endpointConfiguration.Settings; CheckIfSettingsWhereUsedToCreateAnotherEndpoint(settings); var assemblyScanningComponent = AssemblyScanningComponent.Initialize(settings.Get <AssemblyScanningComponent.Configuration>(), settings); endpointConfiguration.FinalizeConfiguration(assemblyScanningComponent.AvailableTypes); var hostingSetting = settings.Get <HostingComponent.Settings>(); var useDefaultBuilder = hostingSetting.CustomObjectBuilder == null; var container = useDefaultBuilder ? new LightInjectObjectBuilder() : hostingSetting.CustomObjectBuilder; var commonObjectBuilder = new CommonObjectBuilder(container); IConfigureComponents internalContainer = commonObjectBuilder; IBuilder internalBuilder = commonObjectBuilder; //for backwards compatibility we need to make the IBuilder available in the container internalContainer.ConfigureComponent(_ => internalBuilder, DependencyLifecycle.SingleInstance); var hostingConfiguration = HostingComponent.PrepareConfiguration(settings.Get <HostingComponent.Settings>(), assemblyScanningComponent, internalContainer); if (useDefaultBuilder) { hostingConfiguration.AddStartupDiagnosticsSection("Container", new { Type = "internal" }); } else { var containerType = internalContainer.GetType(); hostingConfiguration.AddStartupDiagnosticsSection("Container", new { Type = containerType.FullName, Version = FileVersionRetriever.GetFileVersion(containerType) }); } var endpointCreator = EndpointCreator.Create(settings, hostingConfiguration); var hostingComponent = HostingComponent.Initialize(hostingConfiguration); var startableEndpoint = endpointCreator.CreateStartableEndpoint(internalBuilder, hostingComponent); hostingComponent.RegisterBuilder(internalBuilder, true); await hostingComponent.RunInstallers().ConfigureAwait(false); return(new InternallyManagedContainerHost(startableEndpoint, hostingComponent)); }
void RegisterContainerAdapter(IContainer container) { var b = new CommonObjectBuilder { Container = container, }; Builder = b; configurer = b; configurer.ConfigureComponent <CommonObjectBuilder>(DependencyLifecycle.SingleInstance) .ConfigureProperty(c => c.Container, container); }