Browse Source

Merge pull request #17074 from abpframework/liangshiwei/group4

Group4 Enable nullable annotations
pull/17099/head
maliming 3 years ago
committed by GitHub
parent
commit
df4fa5af32
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj
  2. 4
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyOptions.cs
  3. 2
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpMultiTenancyCookieHelper.cs
  4. 2
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/CookieTenantResolveContributor.cs
  5. 4
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/DomainTenantResolveContributor.cs
  6. 2
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/FormTenantResolveContributor.cs
  7. 6
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HeaderTenantResolveContributor.cs
  8. 2
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpContextTenantResolveResultAccessor.cs
  9. 2
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolveContributorBase.cs
  10. 6
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs
  11. 8
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/QueryStringTenantResolveContributor.cs
  12. 2
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/RouteTenantResolveContributor.cs
  13. 2
      framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj
  14. 6
      framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/BasicTenantInfo.cs
  15. 6
      framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ICurrentTenant.cs
  16. 2
      framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ICurrentTenantAccessor.cs
  17. 2
      framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs
  18. 3
      framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantResolveContext.cs
  19. 3
      framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantResolveResultAccessor.cs
  20. 8
      framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantStore.cs
  21. 4
      framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantConfiguration.cs
  22. 8
      framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantConnectionStringUpdatedEto.cs
  23. 2
      framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantCreatedEto.cs
  24. 2
      framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantResolveContext.cs
  25. 2
      framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantResolveResult.cs
  26. 2
      framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj
  27. 6
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AsyncLocalCurrentTenantAccessor.cs
  28. 8
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ConfigurationStore/DefaultTenantStore.cs
  29. 8
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs
  30. 40
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs
  31. 2
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/NullTenantResolveResultAccessor.cs
  32. 6
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs
  33. 2
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantResolveContext.cs
  34. 2
      framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantSettingValueProvider.cs
  35. 2
      framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs

2
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj

@ -5,6 +5,8 @@
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<WarningsAsErrors>Nullable</WarningsAsErrors>
<AssemblyName>Volo.Abp.AspNetCore.MultiTenancy</AssemblyName>
<PackageId>Volo.Abp.AspNetCore.MultiTenancy</PackageId>
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>

4
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyOptions.cs

@ -105,7 +105,7 @@ public class AbpAspNetCoreMultiTenancyOptions
else
{
var transcodingStream = Encoding.CreateTranscodingStream(context.Response.Body, resolvedContentTypeEncoding, Encoding.UTF8, leaveOpen: true);
ExceptionDispatchInfo exceptionDispatchInfo = null;
ExceptionDispatchInfo? exceptionDispatchInfo = null;
try
{
await JsonSerializer.SerializeAsync(transcodingStream, error, error.GetType(), jsonSerializerOptions, context.RequestAborted);
@ -138,7 +138,7 @@ public class AbpAspNetCoreMultiTenancyOptions
var details = exception is BusinessException businessException ? businessException.Details : string.Empty;
await context.Response.WriteAsync($"<html lang=\"{HtmlEncoder.Default.Encode(CultureInfo.CurrentCulture.Name)}\"><body>\r\n");
await context.Response.WriteAsync($"<h3>{HtmlEncoder.Default.Encode(message)}</h3>{HtmlEncoder.Default.Encode(details)}<br>\r\n");
await context.Response.WriteAsync($"<h3>{HtmlEncoder.Default.Encode(message)}</h3>{HtmlEncoder.Default.Encode(details!)}<br>\r\n");
await context.Response.WriteAsync("</body></html>\r\n");
// Note the 500 spaces are to work around an IE 'feature'

2
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpMultiTenancyCookieHelper.cs

@ -14,7 +14,7 @@ public static class AbpMultiTenancyCookieHelper
{
context.Response.Cookies.Append(
tenantKey,
tenantId.ToString(),
tenantId.ToString()!,
new CookieOptions
{
Path = "/",

2
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/CookieTenantResolveContributor.cs

@ -10,7 +10,7 @@ public class CookieTenantResolveContributor : HttpTenantResolveContributorBase
public override string Name => ContributorName;
protected override Task<string> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
protected override Task<string?> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
{
return Task.FromResult(httpContext.Request.Cookies[context.GetAbpAspNetCoreMultiTenancyOptions().TenantKey]);
}

4
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/DomainTenantResolveContributor.cs

@ -23,11 +23,11 @@ public class DomainTenantResolveContributor : HttpTenantResolveContributorBase
_domainFormat = domainFormat.RemovePreFix(ProtocolPrefixes);
}
protected override Task<string> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
protected override Task<string?> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
{
if (!httpContext.Request.Host.HasValue)
{
return Task.FromResult<string>(null);
return Task.FromResult<string?>(null);
}
var hostName = httpContext.Request.Host.Value.RemovePreFix(ProtocolPrefixes);

2
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/FormTenantResolveContributor.cs

@ -12,7 +12,7 @@ public class FormTenantResolveContributor : HttpTenantResolveContributorBase
public override string Name => ContributorName;
protected override async Task<string> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
protected override async Task<string?> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
{
if (!httpContext.Request.HasFormContentType)
{

6
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HeaderTenantResolveContributor.cs

@ -14,11 +14,11 @@ public class HeaderTenantResolveContributor : HttpTenantResolveContributorBase
public override string Name => ContributorName;
protected override Task<string> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
protected override Task<string?> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
{
if (httpContext.Request.Headers.IsNullOrEmpty())
{
return Task.FromResult((string)null);
return Task.FromResult((string?)null);
}
var tenantIdKey = context.GetAbpAspNetCoreMultiTenancyOptions().TenantKey;
@ -26,7 +26,7 @@ public class HeaderTenantResolveContributor : HttpTenantResolveContributorBase
var tenantIdHeader = httpContext.Request.Headers[tenantIdKey];
if (tenantIdHeader == string.Empty || tenantIdHeader.Count < 1)
{
return Task.FromResult((string)null);
return Task.FromResult((string?)null);
}
if (tenantIdHeader.Count > 1)

2
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpContextTenantResolveResultAccessor.cs

@ -9,7 +9,7 @@ public class HttpContextTenantResolveResultAccessor : ITenantResolveResultAccess
{
public const string HttpContextItemName = "__AbpTenantResolveResult";
public TenantResolveResult Result {
public TenantResolveResult? Result {
get => _httpContextAccessor.HttpContext?.Items[HttpContextItemName] as TenantResolveResult;
set {
if (_httpContextAccessor.HttpContext == null)

2
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolveContributorBase.cs

@ -39,5 +39,5 @@ public abstract class HttpTenantResolveContributorBase : TenantResolveContributo
}
}
protected abstract Task<string> GetTenantIdOrNameFromHttpContextOrNullAsync([NotNull] ITenantResolveContext context, [NotNull] HttpContext httpContext);
protected abstract Task<string?> GetTenantIdOrNameFromHttpContextOrNullAsync([NotNull] ITenantResolveContext context, [NotNull] HttpContext httpContext);
}

6
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs

@ -40,7 +40,7 @@ public class MultiTenancyMiddleware : IMiddleware, ITransientDependency
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
TenantConfiguration tenant = null;
TenantConfiguration? tenant = null;
try
{
tenant = await _tenantConfigurationProvider.GetAsync(saveResolveResult: true);
@ -86,7 +86,7 @@ public class MultiTenancyMiddleware : IMiddleware, ITransientDependency
}
}
private async Task<RequestCulture> TryGetRequestCultureAsync(HttpContext httpContext)
private async Task<RequestCulture?> TryGetRequestCultureAsync(HttpContext httpContext)
{
var requestCultureFeature = httpContext.Features.Get<IRequestCultureFeature>();
@ -114,7 +114,7 @@ public class MultiTenancyMiddleware : IMiddleware, ITransientDependency
string culture;
string uiCulture;
if (defaultLanguage.Contains(';'))
if (defaultLanguage!.Contains(';'))
{
var splitted = defaultLanguage.Split(';');
culture = splitted[0];

8
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/QueryStringTenantResolveContributor.cs

@ -11,7 +11,7 @@ public class QueryStringTenantResolveContributor : HttpTenantResolveContributorB
public override string Name => ContributorName;
protected override Task<string> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
protected override Task<string?> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
{
if (httpContext.Request.QueryString.HasValue)
{
@ -22,13 +22,13 @@ public class QueryStringTenantResolveContributor : HttpTenantResolveContributorB
if (tenantValue.IsNullOrWhiteSpace())
{
context.Handled = true;
return Task.FromResult<string>(null);
return Task.FromResult<string?>(null);
}
return Task.FromResult(tenantValue);
return Task.FromResult(tenantValue)!;
}
}
return Task.FromResult<string>(null);
return Task.FromResult<string?>(null);
}
}

2
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/RouteTenantResolveContributor.cs

@ -12,7 +12,7 @@ public class RouteTenantResolveContributor : HttpTenantResolveContributorBase
public override string Name => ContributorName;
protected override Task<string> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
protected override Task<string?> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext)
{
var tenantId = httpContext.GetRouteValue(context.GetAbpAspNetCoreMultiTenancyOptions().TenantKey);
return Task.FromResult(tenantId != null ? Convert.ToString(tenantId) : null);

2
framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj

@ -5,6 +5,8 @@
<PropertyGroup>
<TargetFrameworks>netstandard2.0;netstandard2.1;net7.0</TargetFrameworks>
<Nullable>enable</Nullable>
<WarningsAsErrors>Nullable</WarningsAsErrors>
<AssemblyName>Volo.Abp.MultiTenancy.Abstractions</AssemblyName>
<PackageId>Volo.Abp.MultiTenancy.Abstractions</PackageId>
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>

6
framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/BasicTenantInfo.cs

@ -9,16 +9,14 @@ public class BasicTenantInfo
/// Null indicates the host.
/// Not null value for a tenant.
/// </summary>
[CanBeNull]
public Guid? TenantId { get; }
/// <summary>
/// Name of the tenant if <see cref="TenantId"/> is not null.
/// </summary>
[CanBeNull]
public string Name { get; }
public string? Name { get; }
public BasicTenantInfo(Guid? tenantId, string name = null)
public BasicTenantInfo(Guid? tenantId, string? name = null)
{
TenantId = tenantId;
Name = name;

6
framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ICurrentTenant.cs

@ -7,11 +7,9 @@ public interface ICurrentTenant
{
bool IsAvailable { get; }
[CanBeNull]
Guid? Id { get; }
[CanBeNull]
string Name { get; }
string? Name { get; }
IDisposable Change(Guid? id, string name = null);
IDisposable Change(Guid? id, string? name = null);
}

2
framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ICurrentTenantAccessor.cs

@ -7,5 +7,5 @@ namespace Volo.Abp.MultiTenancy;
public interface ICurrentTenantAccessor
{
BasicTenantInfo Current { get; set; }
BasicTenantInfo? Current { get; set; }
}

2
framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs

@ -4,5 +4,5 @@ namespace Volo.Abp.MultiTenancy;
public interface ITenantConfigurationProvider
{
Task<TenantConfiguration> GetAsync(bool saveResolveResult = false);
Task<TenantConfiguration?> GetAsync(bool saveResolveResult = false);
}

3
framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantResolveContext.cs

@ -5,8 +5,7 @@ namespace Volo.Abp.MultiTenancy;
public interface ITenantResolveContext : IServiceProviderAccessor
{
[CanBeNull]
string TenantIdOrName { get; set; }
string? TenantIdOrName { get; set; }
bool Handled { get; set; }
}

3
framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantResolveResultAccessor.cs

@ -4,6 +4,5 @@ namespace Volo.Abp.MultiTenancy;
public interface ITenantResolveResultAccessor
{
[CanBeNull]
TenantResolveResult Result { get; set; }
TenantResolveResult? Result { get; set; }
}

8
framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantStore.cs

@ -5,13 +5,13 @@ namespace Volo.Abp.MultiTenancy;
public interface ITenantStore
{
Task<TenantConfiguration> FindAsync(string name);
Task<TenantConfiguration?> FindAsync(string name);
Task<TenantConfiguration> FindAsync(Guid id);
Task<TenantConfiguration?> FindAsync(Guid id);
[Obsolete("Use FindAsync method.")]
TenantConfiguration Find(string name);
TenantConfiguration? Find(string name);
[Obsolete("Use FindAsync method.")]
TenantConfiguration Find(Guid id);
TenantConfiguration? Find(Guid id);
}

4
framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantConfiguration.cs

@ -9,9 +9,9 @@ public class TenantConfiguration
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Name { get; set; } = default!;
public ConnectionStrings ConnectionStrings { get; set; }
public ConnectionStrings? ConnectionStrings { get; set; }
public bool IsActive { get; set; }

8
framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantConnectionStringUpdatedEto.cs

@ -10,11 +10,11 @@ public class TenantConnectionStringUpdatedEto : EtoBase
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Name { get; set; } = default!;
public string ConnectionStringName { get; set; }
public string ConnectionStringName { get; set; } = default!;
public string OldValue { get; set; }
public string? OldValue { get; set; }
public string NewValue { get; set; }
public string? NewValue { get; set; }
}

2
framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantCreatedEto.cs

@ -10,5 +10,5 @@ public class TenantCreatedEto : EtoBase
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Name { get; set; } = default!;
}

2
framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantResolveContext.cs

@ -6,7 +6,7 @@ public class TenantResolveContext : ITenantResolveContext
{
public IServiceProvider ServiceProvider { get; }
public string TenantIdOrName { get; set; }
public string? TenantIdOrName { get; set; }
public bool Handled { get; set; }

2
framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantResolveResult.cs

@ -4,7 +4,7 @@ namespace Volo.Abp.MultiTenancy;
public class TenantResolveResult
{
public string TenantIdOrName { get; set; }
public string? TenantIdOrName { get; set; }
public List<string> AppliedResolvers { get; }

2
framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj

@ -5,6 +5,8 @@
<PropertyGroup>
<TargetFrameworks>netstandard2.0;netstandard2.1;net7.0</TargetFrameworks>
<Nullable>enable</Nullable>
<WarningsAsErrors>Nullable</WarningsAsErrors>
<AssemblyName>Volo.Abp.MultiTenancy</AssemblyName>
<PackageId>Volo.Abp.MultiTenancy</PackageId>
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>

6
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AsyncLocalCurrentTenantAccessor.cs

@ -7,15 +7,15 @@ public class AsyncLocalCurrentTenantAccessor : ICurrentTenantAccessor
{
public static AsyncLocalCurrentTenantAccessor Instance { get; } = new();
public BasicTenantInfo Current {
public BasicTenantInfo? Current {
get => _currentScope.Value;
set => _currentScope.Value = value;
}
private readonly AsyncLocal<BasicTenantInfo> _currentScope;
private readonly AsyncLocal<BasicTenantInfo?> _currentScope;
private AsyncLocalCurrentTenantAccessor()
{
_currentScope = new AsyncLocal<BasicTenantInfo>();
_currentScope = new AsyncLocal<BasicTenantInfo?>();
}
}

8
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ConfigurationStore/DefaultTenantStore.cs

@ -16,22 +16,22 @@ public class DefaultTenantStore : ITenantStore, ITransientDependency
_options = options.CurrentValue;
}
public Task<TenantConfiguration> FindAsync(string name)
public Task<TenantConfiguration?> FindAsync(string name)
{
return Task.FromResult(Find(name));
}
public Task<TenantConfiguration> FindAsync(Guid id)
public Task<TenantConfiguration?> FindAsync(Guid id)
{
return Task.FromResult(Find(id));
}
public TenantConfiguration Find(string name)
public TenantConfiguration? Find(string name)
{
return _options.Tenants?.FirstOrDefault(t => t.Name == name);
}
public TenantConfiguration Find(Guid id)
public TenantConfiguration? Find(Guid id)
{
return _options.Tenants?.FirstOrDefault(t => t.Id == id);
}

8
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs

@ -9,7 +9,7 @@ public class CurrentTenant : ICurrentTenant, ITransientDependency
public virtual Guid? Id => _currentTenantAccessor.Current?.TenantId;
public string Name => _currentTenantAccessor.Current?.Name;
public string? Name => _currentTenantAccessor.Current?.Name;
private readonly ICurrentTenantAccessor _currentTenantAccessor;
@ -18,17 +18,17 @@ public class CurrentTenant : ICurrentTenant, ITransientDependency
_currentTenantAccessor = currentTenantAccessor;
}
public IDisposable Change(Guid? id, string name = null)
public IDisposable Change(Guid? id, string? name = null)
{
return SetCurrent(id, name);
}
private IDisposable SetCurrent(Guid? tenantId, string name = null)
private IDisposable SetCurrent(Guid? tenantId, string? name = null)
{
var parentScope = _currentTenantAccessor.Current;
_currentTenantAccessor.Current = new BasicTenantInfo(tenantId, name);
return new DisposeAction<ValueTuple<ICurrentTenantAccessor, BasicTenantInfo>>(static (state) =>
return new DisposeAction<ValueTuple<ICurrentTenantAccessor, BasicTenantInfo?>>(static (state) =>
{
var (currentTenantAccessor, parentScope) = state;
currentTenantAccessor.Current = parentScope;

40
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs

@ -24,7 +24,7 @@ public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolv
_serviceProvider = serviceProvider;
}
public override async Task<string> ResolveAsync(string connectionStringName = null)
public override async Task<string> ResolveAsync(string? connectionStringName = null)
{
if (_currentTenant.Id == null)
{
@ -40,7 +40,7 @@ public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolv
return await base.ResolveAsync(connectionStringName);
}
var tenantDefaultConnectionString = tenant.ConnectionStrings.Default;
var tenantDefaultConnectionString = tenant.ConnectionStrings?.Default;
//Requesting default connection string...
if (connectionStringName == null ||
@ -48,41 +48,41 @@ public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolv
{
//Return tenant's default or global default
return !tenantDefaultConnectionString.IsNullOrWhiteSpace()
? tenantDefaultConnectionString
: Options.ConnectionStrings.Default;
? tenantDefaultConnectionString!
: Options.ConnectionStrings.Default!;
}
//Requesting specific connection string...
var connString = tenant.ConnectionStrings.GetOrDefault(connectionStringName);
var connString = tenant.ConnectionStrings?.GetOrDefault(connectionStringName);
if (!connString.IsNullOrWhiteSpace())
{
//Found for the tenant
return connString;
return connString!;
}
//Fallback to the mapped database for the specific connection string
var database = Options.Databases.GetMappedDatabaseOrNull(connectionStringName);
if (database != null && database.IsUsedByTenants)
{
connString = tenant.ConnectionStrings.GetOrDefault(database.DatabaseName);
connString = tenant.ConnectionStrings?.GetOrDefault(database.DatabaseName);
if (!connString.IsNullOrWhiteSpace())
{
//Found for the tenant
return connString;
return connString!;
}
}
//Fallback to tenant's default connection string if available
if (!tenantDefaultConnectionString.IsNullOrWhiteSpace())
{
return tenantDefaultConnectionString;
return tenantDefaultConnectionString!;
}
return await base.ResolveAsync(connectionStringName);
}
[Obsolete("Use ResolveAsync method.")]
public override string Resolve(string connectionStringName = null)
public override string Resolve(string? connectionStringName = null)
{
if (_currentTenant.Id == null)
{
@ -98,7 +98,7 @@ public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolv
return base.Resolve(connectionStringName);
}
var tenantDefaultConnectionString = tenant.ConnectionStrings.Default;
var tenantDefaultConnectionString = tenant.ConnectionStrings?.Default;
//Requesting default connection string...
if (connectionStringName == null ||
@ -106,42 +106,42 @@ public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolv
{
//Return tenant's default or global default
return !tenantDefaultConnectionString.IsNullOrWhiteSpace()
? tenantDefaultConnectionString
: Options.ConnectionStrings.Default;
? tenantDefaultConnectionString!
: Options.ConnectionStrings.Default!;
}
//Requesting specific connection string...
var connString = tenant.ConnectionStrings.GetOrDefault(connectionStringName);
var connString = tenant.ConnectionStrings?.GetOrDefault(connectionStringName);
if (!connString.IsNullOrWhiteSpace())
{
//Found for the tenant
return connString;
return connString!;
}
//Fallback to tenant's default connection string if available
if (!tenantDefaultConnectionString.IsNullOrWhiteSpace())
{
return tenantDefaultConnectionString;
return tenantDefaultConnectionString!;
}
//Try to find the specific connection string for given name
var connStringInOptions = Options.ConnectionStrings.GetOrDefault(connectionStringName);
if (!connStringInOptions.IsNullOrWhiteSpace())
{
return connStringInOptions;
return connStringInOptions!;
}
//Fallback to the global default connection string
var defaultConnectionString = Options.ConnectionStrings.Default;
if (!defaultConnectionString.IsNullOrWhiteSpace())
{
return defaultConnectionString;
return defaultConnectionString!;
}
throw new AbpException("No connection string defined!");
}
protected virtual async Task<TenantConfiguration> FindTenantConfigurationAsync(Guid tenantId)
protected virtual async Task<TenantConfiguration?> FindTenantConfigurationAsync(Guid tenantId)
{
using (var serviceScope = _serviceProvider.CreateScope())
{
@ -154,7 +154,7 @@ public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolv
}
[Obsolete("Use FindTenantConfigurationAsync method.")]
protected virtual TenantConfiguration FindTenantConfiguration(Guid tenantId)
protected virtual TenantConfiguration? FindTenantConfiguration(Guid tenantId)
{
using (var serviceScope = _serviceProvider.CreateScope())
{

2
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/NullTenantResolveResultAccessor.cs

@ -4,7 +4,7 @@ namespace Volo.Abp.MultiTenancy;
public class NullTenantResolveResultAccessor : ITenantResolveResultAccessor, ISingletonDependency
{
public TenantResolveResult Result {
public TenantResolveResult? Result {
get => null;
set { }
}

6
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs

@ -25,7 +25,7 @@ public class TenantConfigurationProvider : ITenantConfigurationProvider, ITransi
StringLocalizer = stringLocalizer;
}
public virtual async Task<TenantConfiguration> GetAsync(bool saveResolveResult = false)
public virtual async Task<TenantConfiguration?> GetAsync(bool saveResolveResult = false)
{
var resolveResult = await TenantResolver.ResolveTenantIdOrNameAsync();
@ -34,7 +34,7 @@ public class TenantConfigurationProvider : ITenantConfigurationProvider, ITransi
TenantResolveResultAccessor.Result = resolveResult;
}
TenantConfiguration tenant = null;
TenantConfiguration? tenant = null;
if (resolveResult.TenantIdOrName != null)
{
tenant = await FindTenantAsync(resolveResult.TenantIdOrName);
@ -61,7 +61,7 @@ public class TenantConfigurationProvider : ITenantConfigurationProvider, ITransi
return tenant;
}
protected virtual async Task<TenantConfiguration> FindTenantAsync(string tenantIdOrName)
protected virtual async Task<TenantConfiguration?> FindTenantAsync(string tenantIdOrName)
{
if (Guid.TryParse(tenantIdOrName, out var parsedTenantId))
{

2
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantResolveContext.cs

@ -6,7 +6,7 @@ public class TenantResolveContext : ITenantResolveContext
{
public IServiceProvider ServiceProvider { get; }
public string TenantIdOrName { get; set; }
public string? TenantIdOrName { get; set; }
public bool Handled { get; set; }

2
framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantSettingValueProvider.cs

@ -19,7 +19,7 @@ public class TenantSettingValueProvider : SettingValueProvider
CurrentTenant = currentTenant;
}
public async override Task<string> GetOrNullAsync(SettingDefinition setting)
public async override Task<string?> GetOrNullAsync(SettingDefinition setting)
{
return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentTenant.Id?.ToString());
}

2
framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs

@ -112,7 +112,7 @@ public class AppUrlProvider : IAppUrlProvider, ITransientDependency
if (CurrentTenant.Id.HasValue && CurrentTenant.Name.IsNullOrEmpty())
{
var tenantConfiguration = await TenantStore.FindAsync(CurrentTenant.Id.Value);
return tenantConfiguration.Name;
return tenantConfiguration!.Name;
}
return CurrentTenant.Name!;

Loading…
Cancel
Save