Exemple #1
0
        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);
            }
        }