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>()); } }
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."); } }
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()); }
public void Build_NoActionsRegistered() { var builder = new ConfigurationActionBuilder(); Assert.IsNotNull(builder.Build(), "Even if nothing is registered, the built action should not be null."); }