示例#1
0
 public TenantContainerMiddleware(
     RequestDelegate next,
     ILoggerFactory loggerFactory,
     ITenantContainerFactory <TTenant> factory)
 {
     _next    = next;
     _log     = loggerFactory.CreateLogger <TenantContainerMiddleware <TTenant> >();
     _factory = factory;
 }
示例#2
0
 public TenantsHost(IOptions <TenantsConfig> tenantsOption,
                    ITenantContainerFactory factory,
                    IModulesHost modulesHost,
                    ILogger <TenantsHost> logger)
 {
     tenantsConfig          = tenantsOption.Value;
     tenantContainerFactory = factory;
     this.modulesHost       = modulesHost;
     this.logger            = logger;
 }
示例#3
0
        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);
            });
        }