diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj index ac7d3eb556..eeb6abb56e 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo.Abp.AspNetCore.MultiTenancy.csproj @@ -5,6 +5,8 @@ net7.0 + enable + Nullable Volo.Abp.AspNetCore.MultiTenancy Volo.Abp.AspNetCore.MultiTenancy $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyOptions.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyOptions.cs index 3ac06350d9..95efaf2d0c 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpAspNetCoreMultiTenancyOptions.cs +++ b/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($"\r\n"); - await context.Response.WriteAsync($"

{HtmlEncoder.Default.Encode(message)}

{HtmlEncoder.Default.Encode(details)}
\r\n"); + await context.Response.WriteAsync($"

{HtmlEncoder.Default.Encode(message)}

{HtmlEncoder.Default.Encode(details!)}
\r\n"); await context.Response.WriteAsync("\r\n"); // Note the 500 spaces are to work around an IE 'feature' diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpMultiTenancyCookieHelper.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpMultiTenancyCookieHelper.cs index d4a91f3b12..59ace12d77 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AbpMultiTenancyCookieHelper.cs +++ b/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 = "/", diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/CookieTenantResolveContributor.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/CookieTenantResolveContributor.cs index 1eabd3ebfb..5804cedf36 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/CookieTenantResolveContributor.cs +++ b/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 GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext) + protected override Task GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext) { return Task.FromResult(httpContext.Request.Cookies[context.GetAbpAspNetCoreMultiTenancyOptions().TenantKey]); } diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/DomainTenantResolveContributor.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/DomainTenantResolveContributor.cs index 78f92ac20e..d3e99d12d9 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/DomainTenantResolveContributor.cs +++ b/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 GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext) + protected override Task GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext) { if (!httpContext.Request.Host.HasValue) { - return Task.FromResult(null); + return Task.FromResult(null); } var hostName = httpContext.Request.Host.Value.RemovePreFix(ProtocolPrefixes); diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/FormTenantResolveContributor.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/FormTenantResolveContributor.cs index d55343c94c..eed8f2a6c4 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/FormTenantResolveContributor.cs +++ b/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 GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext) + protected override async Task GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext) { if (!httpContext.Request.HasFormContentType) { diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HeaderTenantResolveContributor.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HeaderTenantResolveContributor.cs index a0bec0d606..7387b9f98e 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HeaderTenantResolveContributor.cs +++ b/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 GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext) + protected override Task 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) diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpContextTenantResolveResultAccessor.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpContextTenantResolveResultAccessor.cs index 1197e16baa..b633a89e81 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpContextTenantResolveResultAccessor.cs +++ b/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) diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolveContributorBase.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolveContributorBase.cs index b0900c899f..1b003e3ba9 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolveContributorBase.cs +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpTenantResolveContributorBase.cs @@ -39,5 +39,5 @@ public abstract class HttpTenantResolveContributorBase : TenantResolveContributo } } - protected abstract Task GetTenantIdOrNameFromHttpContextOrNullAsync([NotNull] ITenantResolveContext context, [NotNull] HttpContext httpContext); + protected abstract Task GetTenantIdOrNameFromHttpContextOrNullAsync([NotNull] ITenantResolveContext context, [NotNull] HttpContext httpContext); } diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs index 89ae55b3b1..310add4bfc 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/MultiTenancyMiddleware.cs +++ b/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 TryGetRequestCultureAsync(HttpContext httpContext) + private async Task TryGetRequestCultureAsync(HttpContext httpContext) { var requestCultureFeature = httpContext.Features.Get(); @@ -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]; diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/QueryStringTenantResolveContributor.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/QueryStringTenantResolveContributor.cs index f4f2cf8cb6..49fb0dc620 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/QueryStringTenantResolveContributor.cs +++ b/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 GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext) + protected override Task 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(null); + return Task.FromResult(null); } - return Task.FromResult(tenantValue); + return Task.FromResult(tenantValue)!; } } - return Task.FromResult(null); + return Task.FromResult(null); } } diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/RouteTenantResolveContributor.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/RouteTenantResolveContributor.cs index 06e7972aa1..eabf05e9ad 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/RouteTenantResolveContributor.cs +++ b/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 GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext) + protected override Task GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext) { var tenantId = httpContext.GetRouteValue(context.GetAbpAspNetCoreMultiTenancyOptions().TenantKey); return Task.FromResult(tenantId != null ? Convert.ToString(tenantId) : null); diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj index 77b0ba2894..20fa6c7a24 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj +++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.MultiTenancy.Abstractions Volo.Abp.MultiTenancy.Abstractions $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/BasicTenantInfo.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/BasicTenantInfo.cs index 26517eac34..a11a892a11 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/BasicTenantInfo.cs +++ b/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. /// - [CanBeNull] public Guid? TenantId { get; } /// /// Name of the tenant if is not null. /// - [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; diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ICurrentTenant.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ICurrentTenant.cs index f0348cbc68..09ab641562 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ICurrentTenant.cs +++ b/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); } diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ICurrentTenantAccessor.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ICurrentTenantAccessor.cs index 398bfb756d..ce5ef36d96 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ICurrentTenantAccessor.cs +++ b/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; } } diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs index 7bc34a4d8e..d8889da315 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs +++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantConfigurationProvider.cs @@ -4,5 +4,5 @@ namespace Volo.Abp.MultiTenancy; public interface ITenantConfigurationProvider { - Task GetAsync(bool saveResolveResult = false); + Task GetAsync(bool saveResolveResult = false); } diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantResolveContext.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantResolveContext.cs index 8844390814..e703fd487b 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantResolveContext.cs +++ b/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; } } diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantResolveResultAccessor.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantResolveResultAccessor.cs index 9123910167..707b59493b 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantResolveResultAccessor.cs +++ b/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; } } diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantStore.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantStore.cs index ec2f79f9c4..93dd609cc4 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantStore.cs +++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/ITenantStore.cs @@ -5,13 +5,13 @@ namespace Volo.Abp.MultiTenancy; public interface ITenantStore { - Task FindAsync(string name); + Task FindAsync(string name); - Task FindAsync(Guid id); + Task 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); } diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantConfiguration.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantConfiguration.cs index 39824f41a9..0e5faf9386 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantConfiguration.cs +++ b/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; } diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantConnectionStringUpdatedEto.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantConnectionStringUpdatedEto.cs index 838252cd7a..f36c0d4f64 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantConnectionStringUpdatedEto.cs +++ b/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; } } diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantCreatedEto.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantCreatedEto.cs index 57e564bd78..73f3754a8c 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantCreatedEto.cs +++ b/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!; } diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantResolveContext.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantResolveContext.cs index 86b0586c56..bc661f42c4 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantResolveContext.cs +++ b/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; } diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantResolveResult.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantResolveResult.cs index e707ba27c2..8ce75be339 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantResolveResult.cs +++ b/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 AppliedResolvers { get; } diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj b/framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj index e2a247ffd4..30d1a1c9a0 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj +++ b/framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.MultiTenancy Volo.Abp.MultiTenancy $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AsyncLocalCurrentTenantAccessor.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AsyncLocalCurrentTenantAccessor.cs index 8d04f0eafe..595aaa0f10 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AsyncLocalCurrentTenantAccessor.cs +++ b/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 _currentScope; + private readonly AsyncLocal _currentScope; private AsyncLocalCurrentTenantAccessor() { - _currentScope = new AsyncLocal(); + _currentScope = new AsyncLocal(); } } diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ConfigurationStore/DefaultTenantStore.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ConfigurationStore/DefaultTenantStore.cs index aa7eeb3a8a..d86d810d11 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ConfigurationStore/DefaultTenantStore.cs +++ b/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 FindAsync(string name) + public Task FindAsync(string name) { return Task.FromResult(Find(name)); } - public Task FindAsync(Guid id) + public Task 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); } diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs index fb5d2b147c..1e0bb380dc 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/CurrentTenant.cs +++ b/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>(static (state) => + return new DisposeAction>(static (state) => { var (currentTenantAccessor, parentScope) = state; currentTenantAccessor.Current = parentScope; diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs index b5c01170c5..6ed12a3159 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs @@ -24,7 +24,7 @@ public class MultiTenantConnectionStringResolver : DefaultConnectionStringResolv _serviceProvider = serviceProvider; } - public override async Task ResolveAsync(string connectionStringName = null) + public override async Task 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 FindTenantConfigurationAsync(Guid tenantId) + protected virtual async Task 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()) { diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/NullTenantResolveResultAccessor.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/NullTenantResolveResultAccessor.cs index 023617d405..424d9ea8b8 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/NullTenantResolveResultAccessor.cs +++ b/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 { } } diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs index 7df558f9f3..7e93cf888a 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConfigurationProvider.cs +++ b/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 GetAsync(bool saveResolveResult = false) + public virtual async Task 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 FindTenantAsync(string tenantIdOrName) + protected virtual async Task FindTenantAsync(string tenantIdOrName) { if (Guid.TryParse(tenantIdOrName, out var parsedTenantId)) { diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantResolveContext.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantResolveContext.cs index 86b0586c56..bc661f42c4 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantResolveContext.cs +++ b/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; } diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantSettingValueProvider.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantSettingValueProvider.cs index 39c7803d52..3d672044f3 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantSettingValueProvider.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantSettingValueProvider.cs @@ -19,7 +19,7 @@ public class TenantSettingValueProvider : SettingValueProvider CurrentTenant = currentTenant; } - public async override Task GetOrNullAsync(SettingDefinition setting) + public async override Task GetOrNullAsync(SettingDefinition setting) { return await SettingStore.GetOrNullAsync(setting.Name, Name, CurrentTenant.Id?.ToString()); } diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs index 17a4e684e9..a258d3f8ab 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs +++ b/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!;