diff --git a/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj b/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj
index 13c109ad2a..07f95cb1ee 100644
--- a/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj
+++ b/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj
@@ -16,6 +16,7 @@
+
diff --git a/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs b/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs
index 767fd2a6a0..efb8d4cff4 100644
--- a/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs
+++ b/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs
@@ -1,14 +1,21 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Data;
using Volo.Abp.Modularity;
+using Volo.Abp.Settings;
namespace Volo.Abp.MultiTenancy
{
[DependsOn(typeof(AbpDataModule))]
+ [DependsOn(typeof(AbpSettingsModule))]
public class AbpMultiTenancyAbstractionsModule : AbpModule
{
public override void ConfigureServices(IServiceCollection services)
{
+ services.Configure(options =>
+ {
+ options.ValueProviders.Add();
+ });
+
services.AddAssemblyOf();
}
}
diff --git a/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantSettingValueProvider.cs b/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantSettingValueProvider.cs
new file mode 100644
index 0000000000..2f5ff72a6d
--- /dev/null
+++ b/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantSettingValueProvider.cs
@@ -0,0 +1,45 @@
+using System.Threading.Tasks;
+using Volo.Abp.Settings;
+
+namespace Volo.Abp.MultiTenancy
+{
+ public class TenantSettingValueProvider : SettingValueProvider
+ {
+ public const string ProviderName = "Tenant";
+
+ public override string Name => ProviderName;
+
+ protected ICurrentTenant CurrentTenant { get; }
+
+ public TenantSettingValueProvider(ISettingStore settingStore, ICurrentTenant currentTenant)
+ : base(settingStore)
+ {
+ CurrentTenant = currentTenant;
+ }
+
+ public override async Task GetOrNullAsync(SettingDefinition setting, string providerKey)
+ {
+ if (providerKey == null)
+ {
+ if (CurrentTenant.Id == null)
+ {
+ return null;
+ }
+
+ providerKey = CurrentTenant.Id.ToString();
+ }
+
+ return await SettingStore.GetOrNullAsync(setting.Name, Name, providerKey);
+ }
+
+ public override Task SetAsync(SettingDefinition setting, string value, string providerKey)
+ {
+ return SettingStore.SetAsync(setting.Name, value, Name, providerKey);
+ }
+
+ public override Task ClearAsync(SettingDefinition setting, string providerKey)
+ {
+ return SettingStore.DeleteAsync(setting.Name, Name, providerKey);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/Settings/TenantSettingManagerExtensions.cs b/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/Settings/TenantSettingManagerExtensions.cs
new file mode 100644
index 0000000000..f3500bf80a
--- /dev/null
+++ b/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/Settings/TenantSettingManagerExtensions.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using JetBrains.Annotations;
+using Volo.Abp.MultiTenancy;
+
+namespace Volo.Abp.Settings
+{
+ public static class TenantSettingManagerExtensions
+ {
+ public static Task GetOrNullForTenantAsync(this ISettingManager settingManager, [NotNull] string name, Guid tenantId, bool fallback = true)
+ {
+ return settingManager.GetOrNullAsync(name, TenantSettingValueProvider.ProviderName, tenantId.ToString(), fallback);
+ }
+
+ public static Task GetOrNullForCurrentTenantAsync(this ISettingManager settingManager, [NotNull] string name, bool fallback = true)
+ {
+ return settingManager.GetOrNullAsync(name, TenantSettingValueProvider.ProviderName, null, fallback);
+ }
+
+ public static Task> GetAllForTenantAsync(this ISettingManager settingManager, Guid tenantId, bool fallback = true)
+ {
+ return settingManager.GetAllAsync(TenantSettingValueProvider.ProviderName, tenantId.ToString(), fallback);
+ }
+
+ public static Task> GetAllForCurrentTenantAsync(this ISettingManager settingManager, bool fallback = true)
+ {
+ return settingManager.GetAllAsync(TenantSettingValueProvider.ProviderName, null, fallback);
+ }
+
+ public static Task SetForTenantAsync(this ISettingManager settingManager, Guid tenantId, [NotNull] string name, [CanBeNull] string value, bool forceToSet = false)
+ {
+ return settingManager.SetAsync(name, value, TenantSettingValueProvider.ProviderName, tenantId.ToString(), forceToSet);
+ }
+
+ public static Task SetForCurrentTenantAsync(this ISettingManager settingManager, [NotNull] string name, [CanBeNull] string value, bool forceToSet = false)
+ {
+ return settingManager.SetAsync(name, value, TenantSettingValueProvider.ProviderName, null, forceToSet);
+ }
+ }
+}