public TenantPipelineAccessor( ITenantMiddlewarePipelineFactory <TTenant> tenantPipelineFactory, TenantShellAccessor <TTenant> tenantShellAccessor) { _tenantShellAccessor = tenantShellAccessor; _tenantPipelineFactory = tenantPipelineFactory; TenantPipeline = new Func <IApplicationBuilder, RequestDelegate, Lazy <Task <RequestDelegate> > >((appBuilder, next) => { return(new Lazy <Task <RequestDelegate> >(async() => { var tenantShell = await _tenantShellAccessor.CurrentTenantShell.Value; if (tenantShell == null) { return next; } var tenant = tenantShell?.Tenant; var tenantPipeline = tenantShell.GetOrAddMiddlewarePipeline(new Lazy <Task <RequestDelegate> >(() => { return _tenantPipelineFactory.Create(appBuilder, tenant, next); })); return await tenantPipeline.Value; })); }); }
public TenantPipelineMiddleware( RequestDelegate next, IApplicationBuilder rootApp, ILogger <TenantPipelineMiddleware <TTenant> > logger, ITenantMiddlewarePipelineFactory <TTenant> factory) { _next = next; _rootApp = rootApp; _logger = logger; _factory = factory; }
public async Task Invoke(HttpContext context, ITenantPipelineAccessor <TTenant, IApplicationBuilder, RequestDelegate> tenantPipelineAccessor, ITenantMiddlewarePipelineFactory <TTenant, IApplicationBuilder, RequestDelegate> tenantPipelineFactory) { _logger.LogDebug("Tenant Pipeline Middleware - Getting Tenant Pipeline."); var tenantPipeline = await tenantPipelineAccessor.TenantPipeline(_options.RootApp, _options.RootApp.ApplicationServices, _next, tenantPipelineFactory, !_options.IsTerminal).Value; if (tenantPipeline != null) { _logger.LogDebug("Tenant Pipeline Middleware - Executing Pipeline."); await tenantPipeline(context); } else { _logger.LogDebug("Null tenant shell - No Tenant Middleware Pipeline to execute."); await _next(context); } }