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); + } + } +}