Exemple #1
0
        public async Task ExecuteAsync()
        {
            foreach (var tenant in await _context.Tenants.ToListAsync())
            {
                var actionBuilder = new ConfigurationActionBuilder();

                var tenantInitializer = _tenantConfigurations.FirstOrDefault(i => i.TenantId == tenant.Id);

                if (tenantInitializer != null)
                {
                    tenantInitializer.ConfigureServices(actionBuilder, _configuration, _environment);
                }

                var connectionString = tenant.GetConnectionString("HangfireConnection") ?? (_configuration.GetSection("ConnectionStrings").GetChildren().Any(x => x.Key == "HangfireConnection") ? _configuration.GetConnectionString("HangfireConnection") : null);
                if (connectionString != null)
                {
                    var serverDetails = HangfireMultiTenantHelper.StartHangfireServer(tenant.Id, "mvc", connectionString, _applicationLifetime, _jobFilters, _multiTenantContainer, _backgroundJobFactory, _backgroundJobPerformer, _backgroundJobStateChanger, _additionalProcesses);

                    if (tenantInitializer != null)
                    {
                        tenantInitializer.ConfigureHangfireJobs(serverDetails.recurringJobManager, _configuration, _environment);
                    }

                    actionBuilder.Add(b => b.RegisterInstance(serverDetails.recurringJobManager).As <IRecurringJobManager>().SingleInstance());
                    actionBuilder.Add(b => b.RegisterInstance(serverDetails.backgroundJobClient).As <IBackgroundJobClient>().SingleInstance());
                }
                else
                {
                    actionBuilder.Add(b => b.RegisterInstance <IRecurringJobManager>(null).As <IRecurringJobManager>().SingleInstance());
                    actionBuilder.Add(b => b.RegisterInstance <IBackgroundJobClient>(null).As <IBackgroundJobClient>().SingleInstance());
                }

                _multiTenantContainer.ConfigureTenant(tenant.Id, actionBuilder.Build());
            }
        }
        public void Build_SingleActionRegistered()
        {
            var builder = new ConfigurationActionBuilder();
            builder.Add(b => b.RegisterType<StubDependency1Impl1>().As<IStubDependency1>());
            var built = builder.Build();

            var container = new ContainerBuilder().Build();
            using (var scope = container.BeginLifetimeScope(built))
            {
                Assert.IsInstanceOf<StubDependency1Impl1>(scope.Resolve<IStubDependency1>(), "The registered lambda did not execute.");
            }
        }
        public void Build_SingleActionRegistered()
        {
            var builder = new ConfigurationActionBuilder();

            builder.Add(b => b.RegisterType <StubDependency1Impl1>().As <IStubDependency1>());
            var built = builder.Build();

            var container = new ContainerBuilder().Build();

            using (var scope = container.BeginLifetimeScope(built))
            {
                Assert.IsType <StubDependency1Impl1>(scope.Resolve <IStubDependency1>());
            }
        }
Exemple #4
0
        public void Build_MultipleActionsRegistered()
        {
            var builder = new ConfigurationActionBuilder();

            builder.Add(b => b.RegisterType <StubDependency1Impl1>().As <IStubDependency1>());
            builder.Add(b => b.RegisterType <StubDependency2Impl1>().As <IStubDependency2>());
            var built = builder.Build();

            var container = new ContainerBuilder().Build();

            using (var scope = container.BeginLifetimeScope(built))
            {
                Assert.IsInstanceOf <StubDependency1Impl1>(scope.Resolve <IStubDependency1>(), "The first registered lambda did not execute.");
                Assert.IsInstanceOf <StubDependency2Impl1>(scope.Resolve <IStubDependency2>(), "The second registered lambda did not execute.");
            }
        }
Exemple #5
0
 public void ConfigureServices(ConfigurationActionBuilder services, IConfiguration configuration, IHostingEnvironment hostingEnvironment)
 {
 }
            private void ConfigureTenants(MultitenantContainer mtc)
            {
                var serviceProvider = new AutofacServiceProvider(mtc);

                var hostingEnvironment   = serviceProvider.GetRequiredService <IHostEnvironment>();
                var config               = serviceProvider.GetRequiredService <IConfiguration>();
                var tenantConfigurations = serviceProvider.GetServices <ITenantConfiguration>();

                if (_options.AutoAddITenantConfigurationTenants)
                {
                    foreach (var tenantId in tenantConfigurations.Select(i => i.TenantId.ToString()))
                    {
                        if (!_options.Tenants.ContainsKey(tenantId))
                        {
                            _options.Tenants.Add(tenantId, null);
                        }
                    }
                }

                foreach (var kvp in _options.Tenants)
                {
                    var tenantConfiguration = tenantConfigurations.FirstOrDefault(i => i.TenantId.ToString() == kvp.Key);

                    var actionBuilder  = new ConfigurationActionBuilder();
                    var tenantServices = new ServiceCollection();

                    var defaultBuilder = new TenantBuilder(kvp.Key);

                    foreach (var ConfigureTenantsDelegate in _options.ConfigureTenantsDelegates)
                    {
                        ConfigureTenantsDelegate(defaultBuilder);
                    }

                    var tenantBuilder = new TenantBuilder(kvp.Key);
                    if (kvp.Value != null)
                    {
                        kvp.Value(tenantBuilder);
                    }

                    var options = new TenantBuilder(kvp.Key)
                    {
                        ConfigureAppConfigurationDelegate = (context, builder) =>
                        {
                            defaultBuilder.ConfigureAppConfigurationDelegate(context, builder);
                            tenantBuilder.ConfigureAppConfigurationDelegate(context, builder);
                            if (tenantConfiguration != null)
                            {
                                tenantConfiguration.ConfigureAppConfiguration(context, builder);
                            }
                        },
                        ConfigureServicesDelegate = (context, services) =>
                        {
                            defaultBuilder.ConfigureServicesDelegate(context, services);
                            tenantBuilder.ConfigureServicesDelegate(context, services);
                            if (tenantConfiguration != null)
                            {
                                tenantConfiguration.ConfigureServices(context, services);
                            }
                        },
                        InitializeDbAsyncDelegate = async(sp, cancellationToken) =>
                        {
                            await defaultBuilder.InitializeDbAsyncDelegate(sp, cancellationToken);

                            await tenantBuilder.InitializeDbAsyncDelegate(sp, cancellationToken);

                            if (tenantConfiguration != null)
                            {
                                await tenantConfiguration.InitializeDbAsync(sp, cancellationToken);
                            }
                        },
                        InitializeAsyncDelegate = async(sp, cancellationToken) =>
                        {
                            await defaultBuilder.InitializeAsyncDelegate(sp, cancellationToken);

                            await tenantBuilder.InitializeAsyncDelegate(sp, cancellationToken);

                            if (tenantConfiguration != null)
                            {
                                await tenantConfiguration.InitializeAsync(sp, cancellationToken);
                            }
                        }
                    };

                    foreach (var hostName in defaultBuilder.HostNames)
                    {
                        _options.HostMappings.Add(hostName, kvp.Key);
                    }

                    foreach (var hostName in tenantBuilder.HostNames)
                    {
                        _options.HostMappings.Add(hostName, kvp.Key);
                    }

                    var tenantConfig = TenantConfig.BuildTenantAppConfiguration(config, hostingEnvironment, kvp.Key, options.ConfigureAppConfigurationDelegate);

                    tenantServices.AddSingleton(tenantConfig);

                    var builderContext = new TenantBuilderContext(kvp.Key)
                    {
                        RootServiceProvider = serviceProvider,
                        Configuration       = tenantConfig,
                        HostingEnvironment  = hostingEnvironment
                    };

                    options.ConfigureServicesDelegate(builderContext, tenantServices);

                    actionBuilder.Add(b => b.Populate(tenantServices));
                    mtc.ConfigureTenant(kvp.Key, actionBuilder.Build());
                }
            }
        public void Build_NoActionsRegistered()
        {
            var builder = new ConfigurationActionBuilder();

            Assert.NotNull(builder.Build());
        }
Exemple #8
0
        public void Build_NoActionsRegistered()
        {
            var builder = new ConfigurationActionBuilder();

            Assert.IsNotNull(builder.Build(), "Even if nothing is registered, the built action should not be null.");
        }
 public void Build_NoActionsRegistered()
 {
     var builder = new ConfigurationActionBuilder();
     Assert.IsNotNull(builder.Build(), "Even if nothing is registered, the built action should not be null.");
 }