コード例 #1
0
        public Task <TenantMapResult <TTenantMappings> > MapTenantAsync(string tenantName)
        {
            TenantMapResult <TTenantMappings> mapResult;

            var tMap = NamesStore.GetTenantMappingByName(tenantName);

            if (tMap == null)
            {
                mapResult = TenantMapResult <TTenantMappings> .NotFound;
            }
            else
            {
                mapResult = new TenantMapResult <TTenantMappings>(tMap);
            }

            return(Task.FromResult(mapResult));
        }
コード例 #2
0
        public async Task Invoke(HttpContext httpContext, ITenantResolverService tenantResolverService, ITenantMapperService <TTenantMapping> tenantMapperService,
                                 ITenantInfoService <TTenant> tenantInfoService)
        {
            TenantContext <TTenant> _tenantContext = null;

            TenantResolveResult _tenantResolveResult          = null;
            TenantMapResult <TTenantMapping> _tenantMapResult = null;

            TTenant        _tenant        = default;
            TTenantMapping _tenantMapping = default;

            ResolutionResult _resolutionResult = ResolutionResult.NotFound;
            MappingResult    _mappingResult    = MappingResult.NotFound;
            ResolutionType   _resolutionType   = ResolutionType.Nothing;

            string _tenantResolvedData = "";

            _tenantResolveResult = await tenantResolverService.ResolveTenantAsync(httpContext);

            _resolutionResult = _tenantResolveResult.ResolutionResult;

            switch (_resolutionResult)
            {
            case ResolutionResult.Success:

                _resolutionType     = _tenantResolveResult.ResolutionType;
                _tenantResolvedData = _tenantResolveResult.Value;

                switch (_resolutionType)
                {
                case ResolutionType.TenantId:
                    _mappingResult = MappingResult.NotApply;
                    break;

                case ResolutionType.TenantName:
                    _mappingResult = MappingResult.Success;
                    break;
                }

                break;

            case ResolutionResult.NotApply:

                _mappingResult      = MappingResult.NotApply;
                _tenantResolvedData = "";
                break;

            case ResolutionResult.NotFound:

                _mappingResult      = MappingResult.NotFound;
                _tenantResolvedData = "";
                break;

            case ResolutionResult.Error:

                _mappingResult      = MappingResult.Error;
                _tenantResolvedData = "";
                break;
            }

            if (_resolutionResult == ResolutionResult.Success)
            {
                if (_mappingResult != MappingResult.NotApply) //if applies mapping call mapping service
                {
                    _tenantMapResult = await tenantMapperService.MapTenantAsync(_tenantResolveResult.Value);

                    _mappingResult = _tenantMapResult.MappingResult;

                    switch (_mappingResult)
                    {
                    case MappingResult.Success:

                        _tenantMapping      = _tenantMapResult.Value;
                        _tenantResolvedData = _tenantMapping.TenantId;

                        break;

                    case MappingResult.NotFound:

                        _tenantResolvedData = "";
                        _resolutionResult   = ResolutionResult.NotFound;
                        _resolutionType     = ResolutionType.Nothing;

                        break;

                    case MappingResult.Error:

                        _tenantResolvedData = "";
                        _resolutionResult   = ResolutionResult.Error;
                        _resolutionType     = ResolutionType.Nothing;

                        break;
                    }
                }

                //at this point it must be the id
                if (!string.IsNullOrWhiteSpace(_tenantResolvedData))
                {
                    _tenant = await tenantInfoService.GetTenantInfoAsync(_tenantResolvedData);
                }
            }

            _tenantContext = new TenantContext <TTenant>(_tenant, _resolutionResult, _mappingResult, _resolutionType);

            httpContext.SetTenantContext(_tenantContext);

            await _next(httpContext);
        }