public static IServiceCollection UseBootstrapper( this IServiceCollection services, Action <IInitializersConfigurator> config, IInitializersValidator validator = null, IProcessConstructor constructor = null) { if (config == null) { throw new ArgumentNullException(nameof(config)); } var init = new InitializerConfigurator(); config(init); return(UseBootstrapperInternal(services, init, validator, constructor)); }
private static IServiceCollection UseBootstrapperInternal( IServiceCollection services, IEnumerable <Type> initializers, IInitializersValidator validator = null, IProcessConstructor constructor = null) { if (initializers == null) { throw new ArgumentNullException(nameof(initializers)); } foreach (var type in initializers) { services.AddSingleton(typeof(IInitializer), type); } if (services == null) { throw new ArgumentNullException(nameof(services)); } if (validator == null) { services.AddSingleton(typeof(IInitializersValidator), typeof(DefaultInitializersValidator)); } else { services.AddSingleton(validator); } if (constructor == null) { services.AddSingleton(typeof(IProcessConstructor), typeof(DefaultProcessConstructor)); services.AddSingleton(typeof(IProcessOptimizer), typeof(DefaultProcessOptimizer)); } else { services.AddSingleton(constructor); } return(services.AddHostedService <BootstrapperHostedService>()); }
public BootstrapperHostedService(IEnumerable <IInitializer> initializers, ILogger <BootstrapperHostedService> logger, IInitializersValidator validator, IProcessConstructor constructor) : base(logger, initializers, validator, constructor) { StateChanged += (_, states) => logger.LogInformation($"Bootstrapper state: {states}."); }
public DefaultProcessConstructor(IInitializersValidator validator, IProcessOptimizer optimizer) { _validator = validator ?? throw new ArgumentNullException(nameof(validator)); _optimizer = optimizer ?? throw new ArgumentNullException(nameof(optimizer)); }
public Bootstrapper(ILogger <Bootstrapper> logger, IEnumerable <IInitializer> initializers, IInitializersValidator validator, IProcessConstructor builder) { Logger = logger ?? throw new ArgumentNullException(nameof(logger)); var immutableInitializers = initializers?.ToImmutableArray() ?? throw new ArgumentNullException(nameof(initializers)); if (validator == null) { throw new ArgumentNullException(nameof(validator)); } if (builder == null) { throw new ArgumentNullException(nameof(builder)); } var result = validator.Validate(immutableInitializers); if (!result.IsValid) { throw new ValidationException(result); } AdditionalTime = TimeSpan.FromSeconds(5); StartProcess = new Lazy <IProcess>(() => builder.BuildStartupProcess(immutableInitializers)); StopProcess = new Lazy <IProcess>(() => builder.BuildShutdownProcess(immutableInitializers)); }