public TenantContainerMiddleware( RequestDelegate next, ILoggerFactory loggerFactory, ITenantContainerFactory <TTenant> factory) { _next = next; _log = loggerFactory.CreateLogger <TenantContainerMiddleware <TTenant> >(); _factory = factory; }
public TenantsHost(IOptions <TenantsConfig> tenantsOption, ITenantContainerFactory factory, IModulesHost modulesHost, ILogger <TenantsHost> logger) { tenantsConfig = tenantsOption.Value; tenantContainerFactory = factory; this.modulesHost = modulesHost; this.logger = logger; }
public async Task Invoke(HttpContext context, ITenantContainerFactory factory) { var tenant = context.FindTenant(); if (tenant == null) { throw new InvalidOperationException( "TenantMiddleware must be register before TenantContainerMiddleware"); } using (var scope = factory.CreateContainer(tenant).CreateScope()) { context.RequestServices = scope.ServiceProvider; await _next.Invoke(context); } }
public TenantContainerAccessor(ITenantShellAccessor <TTenant> tenantShellAccessor, ITenantContainerFactory <TTenant> factory) { _tenantShellAccessor = tenantShellAccessor; _containerFactory = factory; TenantContainer = new Lazy <Task <ITenantContainerAdaptor> >(async() => { var tenantShell = await tenantShellAccessor.CurrentTenantShell.Value; if (tenantShell == null) { return(null); } var tenant = tenantShell?.Tenant; var lazy = tenantShell.GetOrAddContainer(() => { return(factory.Get(tenant)); }); return(await lazy.Value); }); }