public MultiTenantConnectionStringManager(ILog <MultiTenantConnectionStringManager> logger,
                                           IConfig <ConnectionConfig> config, ITenantContextAccessor tenantAccessor)
 {
     _config         = config;
     _tenantAccessor = tenantAccessor;
     _logger         = logger;
 }
示例#2
0
 public TenantMiddleware(ITenantContextAccessor tenantContextAccessor, ITenantIdentificationService tenantIdentificationService, IOptions <TenancyHostingOptions> tenancyOptions, ITenantRepository tenantRepository)
 {
     _tenantContextAccessor       = tenantContextAccessor;
     _tenantIdentificationService = tenantIdentificationService;
     _tenancyOptions   = tenancyOptions;
     _tenantRepository = tenantRepository;
 }
 /// <summary>
 /// Initializes a new instance with the specified options configurations.
 /// </summary>
 /// <param name="setups">The configuration actions to run.</param>
 /// <param name="postConfigures">The initialization actions to run.</param>
 public MultiTenantOptionsFactory(IEnumerable <IConfigureOptions <TOptions> > setups, IEnumerable <IPostConfigureOptions <TOptions> > postConfigures, Action <TOptions, TenantContext> tenantConfig, ITenantContextAccessor tenantContextAccessor)
 {
     _setups                    = setups;
     this.tenantConfig          = tenantConfig;
     this.tenantContextAccessor = tenantContextAccessor;
     _postConfigures            = postConfigures;
 }
示例#4
0
        public async Task Invoke(HttpContext context, ITenantIdentificationService tenantIdentificationService,
                                 ITenantContextAccessor tenantContextAccessor, ITenantRepository tenantRepository, IOptions <TenancyHostingOptions> tenancyOptions)
        {
            if (tenancyOptions.Value.TenancyType == TenancyType.None)
            {
                await _next(context);

                return;
            }

            if (tenantContextAccessor.TenantContext != null)
            {
                throw new ApplicationException("Tenant context is already set");
            }

            var tenantId = await tenantIdentificationService.GetTenantIdAsync();

            var tenant = await tenantRepository.Get(tenantId, context.RequestAborted)
                         ?? throw new ApplicationException($"Tenant {tenantId} not found");

            if (tenant.IsShared && tenancyOptions.Value.TenancyType == TenancyType.MonoTenant)
            {
                throw new ApplicationException(
                          $"Received a message for shared tenant {tenantId} in a MonoTenant hosting");
            }

            if (!tenant.IsShared && tenancyOptions.Value.TenancyType == TenancyType.MultiTenant)
            {
                throw new ApplicationException(
                          $"Received a message for premium tenant {tenantId} in a MultiTenant (shared) context");
            }

            if (tenancyOptions.Value.TenancyType == TenancyType.MonoTenant && tenancyOptions.Value.TenantId != tenantId)
            {
                throw new ApplicationException(
                          $"Invalid tenant ID. Expected {tenancyOptions.Value.TenantId} but received {tenantId}");
            }


            tenantContextAccessor.TenantContext = new TenantContext(tenant);

            await _next(context);
        }
示例#5
0
 public TenantContextFlow(ITenantContextAccessor tenantContextAccessor, TenantContext prevContext)
 {
     _tenantContextAccessor = tenantContextAccessor;
     _prevContext           = prevContext;
 }
示例#6
0
 public MultiTenantConfigurationPipe(ITenantContextAccessor contextAccessor)
 {
     _contextAccessor = contextAccessor;
 }
示例#7
0
 public AdoNetMultitenantSnapshotRepository(Scripts scripts,
                                            ILogger <AdoNetSnapshotRepository> logger, IOptions <EventStoreOptions> eventstoreOptions, ITenantContextAccessor tenantContextAccessor)
     : base(scripts, logger, eventstoreOptions)
 {
     _tenantContextAccessor = tenantContextAccessor;
 }
示例#8
0
 public MultiTenantSettingsService(IEnumerable <ISettingsProvider> providers, ITenantContextAccessor contextAccessor)
     : base(providers)
 {
     _contextAccessor = contextAccessor;
 }
 public MultiTenantOptionsCache(ITenantContextAccessor tenantContextAccessor, Action <TOptions, TenantContext> tenantConfig)
 {
     this.tenantConfig          = tenantConfig ?? throw new ArgumentNullException(nameof(tenantConfig));
     this.tenantContextAccessor = tenantContextAccessor ?? throw new ArgumentNullException(nameof(tenantContextAccessor));
 }
 public WeatherForecastController(ILogger <WeatherForecastController> logger, ITenantContextAccessor tenantContextAccessor)
 {
     _logger        = logger;
     _tenantContext = tenantContextAccessor.TenantContext;
 }
 public MultiTenancyMessageBusPublisherDecorator(IMessageBusPublisher inner,
                                                 ITenantContextAccessor tenantContextAccessor)
 {
     _inner = inner;
     _tenantContextAccessor = tenantContextAccessor;
 }
示例#12
0
 public MultiTenantEfUow(TContext dbContext, ITenantContextAccessor tenantContextAccessor, ILogger <MultiTenantEfUow <TEntity, TContext> > logger)
 {
     _dbContext             = dbContext;
     _tenantContextAccessor = tenantContextAccessor;
     _logger = logger;
 }
示例#13
0
 public MultiTenantDbContext(DbContextOptions <MultiTenantDbContext> options, ITenantContextAccessor tenantService) : base(options)
 {
     _tenantId = tenantService.TenantContext.GetTenantId();
 }
示例#14
0
 public static TenantContextFlow ChangeTenantContext(this ITenantContextAccessor tenantContextAccessor, Tenant tenant)
 => tenantContextAccessor.ChangeTenantContext(new TenantContext(tenant));