public static IServiceProvider Initialize(
            IServiceCollection services,
            string connectionString,
            ICacheStore cacheStore,
            IEmailSender emailSender,
            IFileSaver fileSaver,
            EmailsSettings emailsSettings,
            AzureBlobStorageSettings azureBlobStorageSettings,
            ILogger logger,
            IExecutionContextAccessor executionContextAccessor,
            IUserAuthIdProvider userAuthIdProvider,
            bool runQuartz = true)
        {
            if (runQuartz)
            {
                StartQuartz(connectionString, emailsSettings, azureBlobStorageSettings, logger, executionContextAccessor, userAuthIdProvider);
            }

            services.AddSingleton(cacheStore);

            var serviceProvider = CreateAutofacServiceProvider(
                services,
                connectionString,
                emailSender,
                fileSaver,
                emailsSettings,
                azureBlobStorageSettings,
                logger,
                executionContextAccessor,
                userAuthIdProvider);

            return(serviceProvider);
        }
Beispiel #2
0
 public AddTreeOwnerCommandHandler(ITreeRepository treeRepository, IUserProfileRepository userProfileRepository,
                                   IUserAuthIdProvider userAuthIdProvider, IUserAuthIdUniquenessChecker userAuthIdUniquenessChecker)
 {
     _treeRepository              = treeRepository;
     _userProfileRepository       = userProfileRepository;
     _userAuthIdProvider          = userAuthIdProvider;
     _userAuthIdUniquenessChecker = userAuthIdUniquenessChecker;
 }
        private static void StartQuartz(
            string connectionString,
            EmailsSettings emailsSettings,
            AzureBlobStorageSettings blobStorageSettings,
            ILogger logger,
            IExecutionContextAccessor executionContextAccessor,
            IUserAuthIdProvider userAuthIdProvider)
        {
            var schedulerFactory = new StdSchedulerFactory();
            var scheduler        = schedulerFactory.GetScheduler().GetAwaiter().GetResult();

            var container = new ContainerBuilder();

            container.RegisterModule(new LoggingModule(logger));
            container.RegisterModule(new QuartzModule());
            container.RegisterModule(new MediatorModule());
            container.RegisterModule(new DataAccessModule(connectionString));
            container.RegisterModule(new EmailModule(emailsSettings));
            container.RegisterModule(new ProcessingModule());
            container.RegisterModule(new AuthenticationModule(userAuthIdProvider));
            container.RegisterModule(new AzureBlobStorageModule(blobStorageSettings));

            container.RegisterInstance(executionContextAccessor);
            container.Register(c =>
            {
                var dbContextOptionsBuilder = new DbContextOptionsBuilder <TreesContext>();
                dbContextOptionsBuilder.UseSqlServer(connectionString);

                dbContextOptionsBuilder
                .ReplaceService <IValueConverterSelector, StronglyTypedIdValueConverterSelector>();

                return(new TreesContext(dbContextOptionsBuilder.Options));
            }).AsSelf().InstancePerLifetimeScope();

            scheduler.JobFactory = new JobFactory(container.Build());

            scheduler.Start().GetAwaiter().GetResult();

            var processOutboxJob = JobBuilder.Create <ProcessOutboxJob>().Build();
            var trigger          =
                TriggerBuilder
                .Create()
                .StartNow()
                .WithCronSchedule("0/15 * * ? * *")
                .Build();

            scheduler.ScheduleJob(processOutboxJob, trigger).GetAwaiter().GetResult();

            var processInternalCommandsJob = JobBuilder.Create <ProcessInternalCommandsJob>().Build();
            var triggerCommandsProcessing  =
                TriggerBuilder
                .Create()
                .StartNow()
                .WithCronSchedule("0/15 * * ? * *")
                .Build();

            scheduler.ScheduleJob(processInternalCommandsJob, triggerCommandsProcessing).GetAwaiter().GetResult();
        }
Beispiel #4
0
        public ApplicationFixture()
        {
            const string connectionStringEnvironmentVariable =
                "ASPNETCORE_TreeOfAKind_IntegrationTests_ConnectionString";

            ConnectionString = Environment.GetEnvironmentVariable(connectionStringEnvironmentVariable);
            if (ConnectionString == null)
            {
                throw new ApplicationException(
                          $"Define connection string to integration tests database using environment variable: {connectionStringEnvironmentVariable}");
            }

            using var sqlConnection = new SqlConnection(ConnectionString);

            ClearDatabase(sqlConnection);

            EmailsSettings = new EmailsSettings {
                FromAddressEmail = "*****@*****.**"
            };

            AzureBlobStorageSettings = new AzureBlobStorageSettings
            {
                ConnectionString = "someConnectionString",
                Metadata         = new Dictionary <string, string>
                {
                    { "IntegrationTesting", "true" }
                }
            };

            EmailSender = Substitute.For <IEmailSender>();

            FileSaver = Substitute.For <IFileSaver>();

            UserAuthIdProvider = Substitute.For <IUserAuthIdProvider>();

            ExecutionContext = new ExecutionContextMock();

            ApplicationStartup.Initialize(
                new ServiceCollection(),
                ConnectionString,
                new CacheStore(),
                EmailSender,
                FileSaver,
                EmailsSettings,
                AzureBlobStorageSettings,
                Logger.None,
                ExecutionContext,
                UserAuthIdProvider,
                runQuartz: false);
        }
        private static IServiceProvider CreateAutofacServiceProvider(
            IServiceCollection services,
            string connectionString,
            IEmailSender emailSender,
            IFileSaver fileSaver,
            EmailsSettings emailsSettings,
            AzureBlobStorageSettings azureBlobStorageSettings,
            ILogger logger,
            IExecutionContextAccessor executionContextAccessor,
            IUserAuthIdProvider userAuthIdProvider)
        {
            var container = new ContainerBuilder();

            container.Populate(services);

            container.RegisterModule(new LoggingModule(logger));
            container.RegisterModule(new DataAccessModule(connectionString));
            container.RegisterModule(new MediatorModule());
            container.RegisterModule(new DomainModule());
            container.RegisterModule(new GedcomXToDomainModule());
            container.RegisterModule(new AuthenticationModule(userAuthIdProvider));
            container.RegisterModule(new AzureBlobStorageModule(azureBlobStorageSettings, fileSaver));

            if (emailSender != null)
            {
                container.RegisterModule(new EmailModule(emailSender, emailsSettings));
            }
            else
            {
                container.RegisterModule(new EmailModule(emailsSettings));
            }

            container.RegisterModule(new ProcessingModule());

            container.RegisterInstance(executionContextAccessor);

            var buildContainer = container.Build();

            ServiceLocator.SetLocatorProvider(() => new AutofacServiceLocator(buildContainer));

            var serviceProvider = new AutofacServiceProvider(buildContainer);

            CompositionRoot.SetContainer(buildContainer);

            return(serviceProvider);
        }
 public AuthenticationModule(IUserAuthIdProvider userAuthIdProvider)
 {
     _userAuthIdProvider = userAuthIdProvider;
 }