Browse Source

Merge pull request #24389 from abpframework/auto-merge/rel-10-0/4195

Merge branch dev with rel-10.0
pull/24413/head
Ma Liming 5 months ago
committed by GitHub
parent
commit
cdf48e87f7
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 30
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantResolver.cs

30
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantResolver.cs

@ -1,6 +1,8 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -8,25 +10,31 @@ namespace Volo.Abp.MultiTenancy;
public class TenantResolver : ITenantResolver, ITransientDependency public class TenantResolver : ITenantResolver, ITransientDependency
{ {
private readonly IServiceProvider _serviceProvider; public ILogger<TenantResolver> Logger { get; set; }
private readonly AbpTenantResolveOptions _options;
protected IServiceProvider ServiceProvider { get; }
protected AbpTenantResolveOptions Options { get; }
public TenantResolver(IOptions<AbpTenantResolveOptions> options, IServiceProvider serviceProvider) public TenantResolver(IOptions<AbpTenantResolveOptions> options, IServiceProvider serviceProvider)
{ {
_serviceProvider = serviceProvider; Logger = NullLogger<TenantResolver>.Instance;
_options = options.Value;
ServiceProvider = serviceProvider;
Options = options.Value;
} }
public virtual async Task<TenantResolveResult> ResolveTenantIdOrNameAsync() public virtual async Task<TenantResolveResult> ResolveTenantIdOrNameAsync()
{ {
var result = new TenantResolveResult(); var result = new TenantResolveResult();
using (var serviceScope = _serviceProvider.CreateScope()) Logger.LogDebug("Starting resolving tenant...");
using (var serviceScope = ServiceProvider.CreateScope())
{ {
var context = new TenantResolveContext(serviceScope.ServiceProvider); var context = new TenantResolveContext(serviceScope.ServiceProvider);
foreach (var tenantResolver in _options.TenantResolvers) foreach (var tenantResolver in Options.TenantResolvers)
{ {
Logger.LogDebug("Trying to resolve tenant through '{TenantResolverName}'...", tenantResolver.Name);
await tenantResolver.ResolveAsync(context); await tenantResolver.ResolveAsync(context);
result.AppliedResolvers.Add(tenantResolver.Name); result.AppliedResolvers.Add(tenantResolver.Name);
@ -34,15 +42,21 @@ public class TenantResolver : ITenantResolver, ITransientDependency
if (context.HasResolvedTenantOrHost()) if (context.HasResolvedTenantOrHost())
{ {
result.TenantIdOrName = context.TenantIdOrName; result.TenantIdOrName = context.TenantIdOrName;
Logger.LogDebug("Tenant resolved by '{TenantResolverName}' as '{TenantIdOrName}'.", tenantResolver.Name, result.TenantIdOrName ?? "Host");
break; break;
} }
} }
} }
if (result.TenantIdOrName.IsNullOrEmpty() && !string.IsNullOrWhiteSpace(_options.FallbackTenant)) if (result.TenantIdOrName.IsNullOrEmpty() && !string.IsNullOrWhiteSpace(Options.FallbackTenant))
{ {
result.TenantIdOrName = _options.FallbackTenant; result.TenantIdOrName = Options.FallbackTenant;
result.AppliedResolvers.Add(TenantResolverNames.FallbackTenant); result.AppliedResolvers.Add(TenantResolverNames.FallbackTenant);
Logger.LogDebug("No tenant resolved. Using fallback tenant as '{FallbackTenant}'.", result.TenantIdOrName);
}
else if (result.TenantIdOrName.IsNullOrEmpty())
{
Logger.LogDebug("No tenant resolved.");
} }
return result; return result;

Loading…
Cancel
Save