Пример #1
0
        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>();
        }
Пример #2
0
        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));
        }
Пример #3
0
        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>());
        }
Пример #4
0
 public BootstrapperHostedService(IEnumerable <IInitializer> initializers, ILogger <BootstrapperHostedService> logger, IInitializersValidator validator, IProcessConstructor constructor)
     : base(logger, initializers, validator, constructor)
 {
     StateChanged += (_, states) => logger.LogInformation($"Bootstrapper state: {states}.");
 }
Пример #5
0
        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));
        }