public BootstrapperTests() { _fakeProcess = A.Fake <IProcess>(); _fakeProcessConstructor = A.Fake <IProcessConstructor>(); A.CallTo(() => _fakeProcessConstructor.BuildStartupProcess(A <IReadOnlyCollection <IInitializer> > ._)).Returns(_fakeProcess); A.CallTo(() => _fakeProcessConstructor.BuildShutdownProcess(A <IReadOnlyCollection <IInitializer> > ._)).Returns(_fakeProcess); _fixture = new Fixture(); _fixture.Customize(new AutoFakeItEasyCustomization { ConfigureMembers = true }); _fixture.Inject(_fakeProcessConstructor); _sut = _fixture.Create <Bootstrapper>(); }
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 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)); }