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/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/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()); }