Browse Source

Added initial code for setting system

pull/204/head
Halil İbrahim Kalkan 9 years ago
parent
commit
f8ff00868f
  1. 23
      Volo.Abp.sln
  2. 2
      src/AbpDesk/AbpDesk.EntityFrameworkCore/AbpDesk/EntityFrameworkCore/AbpDeskDbContext.cs
  3. 3
      src/Volo.Abp.Ddd/Volo/Abp/AbpServiceBase.cs
  4. 7
      src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/AbpIdentityServerEntityFrameworkCoreModule.cs
  5. 2
      src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/CurrentTenant.cs
  6. 0
      src/Volo.Abp.MultiTenancy.Domain/Volo/Abp/MultiTenancy/AbpMultiTenancyConsts.cs
  7. 22
      src/Volo.Abp.Settings.Domain/Volo.Abp.Settings.Domain.csproj
  8. 17
      src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/AbpSettingsDomainModule.cs
  9. 14
      src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/ISettingRepository.cs
  10. 48
      src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/Setting.cs
  11. 42
      src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/SettingStore.cs
  12. 21
      src/Volo.Abp.Settings.EntityFrameworkCore/Volo.Abp.Settings.EntityFrameworkCore.csproj
  13. 16
      src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/AbpSettingsDbContext.cs
  14. 22
      src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/AbpSettingsEntityFrameworkCoreModule.cs
  15. 28
      src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/EfCoreSettingRepository.cs
  16. 10
      src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/IAbpSettingsDbContext.cs
  17. 20
      src/Volo.Abp.Settings/Volo.Abp.Settings.csproj
  18. 13
      src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs
  19. 21
      src/Volo.Abp.Settings/Volo/Abp/Settings/CurrentTenantSettingContributor.cs
  20. 20
      src/Volo.Abp.Settings/Volo/Abp/Settings/DefaultSettingContributor.cs
  21. 9
      src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingContributor.cs
  22. 20
      src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs
  23. 15
      src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingStore.cs
  24. 49
      src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs
  25. 22
      src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValue.cs

23
Volo.Abp.sln

@ -244,7 +244,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.MultiTenancy.Appli
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.MultiTenancy.Web", "src\Volo.Abp.MultiTenancy.Web\Volo.Abp.MultiTenancy.Web.csproj", "{0808036D-065B-4525-BF30-CBCEA062F8E9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.MultiTenancy.HttpApi", "src\Volo.Abp.MultiTenancy.HttpApi\Volo.Abp.MultiTenancy.HttpApi.csproj", "{06423FAC-67E2-4B7C-B29F-39578F460C4F}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.MultiTenancy.HttpApi", "src\Volo.Abp.MultiTenancy.HttpApi\Volo.Abp.MultiTenancy.HttpApi.csproj", "{06423FAC-67E2-4B7C-B29F-39578F460C4F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Settings", "src\Volo.Abp.Settings\Volo.Abp.Settings.csproj", "{CB6FD800-B6C5-4C2A-8920-B8A29C74AEF6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Settings.EntityFrameworkCore", "src\Volo.Abp.Settings.EntityFrameworkCore\Volo.Abp.Settings.EntityFrameworkCore.csproj", "{1DCD9600-215A-4A94-AEFD-577568D62633}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Settings.Domain", "src\Volo.Abp.Settings.Domain\Volo.Abp.Settings.Domain.csproj", "{837BC537-3AEC-4F6D-9D64-9704F64D0E1E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -640,6 +646,18 @@ Global
{06423FAC-67E2-4B7C-B29F-39578F460C4F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{06423FAC-67E2-4B7C-B29F-39578F460C4F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{06423FAC-67E2-4B7C-B29F-39578F460C4F}.Release|Any CPU.Build.0 = Release|Any CPU
{CB6FD800-B6C5-4C2A-8920-B8A29C74AEF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CB6FD800-B6C5-4C2A-8920-B8A29C74AEF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CB6FD800-B6C5-4C2A-8920-B8A29C74AEF6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CB6FD800-B6C5-4C2A-8920-B8A29C74AEF6}.Release|Any CPU.Build.0 = Release|Any CPU
{1DCD9600-215A-4A94-AEFD-577568D62633}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1DCD9600-215A-4A94-AEFD-577568D62633}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1DCD9600-215A-4A94-AEFD-577568D62633}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1DCD9600-215A-4A94-AEFD-577568D62633}.Release|Any CPU.Build.0 = Release|Any CPU
{837BC537-3AEC-4F6D-9D64-9704F64D0E1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{837BC537-3AEC-4F6D-9D64-9704F64D0E1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{837BC537-3AEC-4F6D-9D64-9704F64D0E1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{837BC537-3AEC-4F6D-9D64-9704F64D0E1E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -759,6 +777,9 @@ Global
{B65973F1-9EE0-4914-B6F2-D88F753E1D21} = {3CE22CAC-4B27-4EEC-A35E-C01219ED6E99}
{0808036D-065B-4525-BF30-CBCEA062F8E9} = {CA154803-3589-47B3-B7CB-B18F94FE1EB6}
{06423FAC-67E2-4B7C-B29F-39578F460C4F} = {CA154803-3589-47B3-B7CB-B18F94FE1EB6}
{CB6FD800-B6C5-4C2A-8920-B8A29C74AEF6} = {4C753F64-0C93-4D65-96C2-A40893AFC1E8}
{1DCD9600-215A-4A94-AEFD-577568D62633} = {4C753F64-0C93-4D65-96C2-A40893AFC1E8}
{837BC537-3AEC-4F6D-9D64-9704F64D0E1E} = {4C753F64-0C93-4D65-96C2-A40893AFC1E8}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5}

2
src/AbpDesk/AbpDesk.EntityFrameworkCore/AbpDesk/EntityFrameworkCore/AbpDeskDbContext.cs

@ -26,7 +26,7 @@ namespace AbpDesk.EntityFrameworkCore
{
base.OnModelCreating(modelBuilder);
modelBuilder.ConfigureMultiTenancy(MultiTenancyDbContext.TablePrefix, MultiTenancyDbContext.Schema);
modelBuilder.ConfigureMultiTenancy();
//Use different classes to map each entity type, as a better practice?
modelBuilder.Entity<Ticket>(b =>

3
src/Volo.Abp.Ddd/Volo/Abp/AbpServiceBase.cs

@ -2,6 +2,7 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.Guids;
using Volo.Abp.MultiTenancy;
using Volo.Abp.ObjectMapping;
using Volo.Abp.Uow;
@ -17,6 +18,8 @@ namespace Volo.Abp
public ILoggerFactory LoggerFactory { get; set; }
public ICurrentTenant CurrentTenant { get; set; }
protected IUnitOfWork CurrentUnitOfWork => UnitOfWorkManager?.Current;
protected ILogger Logger => _lazyLogger.Value;

7
src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/AbpIdentityServerEntityFrameworkCoreModule.cs

@ -1,6 +1,9 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.IdentityServer.ApiResources;
using Volo.Abp.IdentityServer.Clients;
using Volo.Abp.IdentityServer.Grants;
using Volo.Abp.IdentityServer.IdentityResources;
using Volo.Abp.Modularity;
namespace Volo.Abp.IdentityServer.EntityFrameworkCore
@ -14,7 +17,11 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
services.AddAbpDbContext<IdentityServerDbContext>(options =>
{
options.AddDefaultRepositories<IIdentityServerDbContext>();
options.AddRepository<Client, ClientRepository>();
options.AddRepository<ApiResource, ApiResourceRepository>();
options.AddRepository<IdentityResource, IdentityResourceRepository>();
options.AddRepository<PersistedGrant, PersistentGrantRepository>();
});
services.AddAssemblyOf<AbpIdentityServerEntityFrameworkCoreModule>();

2
src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/CurrentTenant.cs

@ -21,7 +21,7 @@ namespace Volo.Abp.MultiTenancy
return SetCurrent(id);
}
public IDisposable Clear()
public IDisposable Clear() //TODO: Remove
{
return Change(null);
}

0
src/Volo.Abp.MultiTenancy.Domain/Volo/Abp/MultiTenancy/AbpIdentityConsts.cs → src/Volo.Abp.MultiTenancy.Domain/Volo/Abp/MultiTenancy/AbpMultiTenancyConsts.cs

22
src/Volo.Abp.Settings.Domain/Volo.Abp.Settings.Domain.csproj

@ -0,0 +1,22 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>Volo.Abp.Settings.Domain</AssemblyName>
<PackageId>Volo.Abp.Settings.Domain</PackageId>
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.Ddd\Volo.Abp.Ddd.csproj" />
<ProjectReference Include="..\Volo.Abp.MultiTenancy.Abstractions\Volo.Abp.MultiTenancy.Abstractions.csproj" />
<ProjectReference Include="..\Volo.Abp.Settings\Volo.Abp.Settings.csproj" />
</ItemGroup>
</Project>

17
src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/AbpSettingsDomainModule.cs

@ -0,0 +1,17 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.Settings
{
[DependsOn(typeof(AbpSettingsModule))]
[DependsOn(typeof(AbpDddModule))]
[DependsOn(typeof(AbpMultiTenancyAbstractionsModule))]
public class AbpSettingsDomainModule : AbpModule
{
public override void ConfigureServices(IServiceCollection services)
{
services.AddAssemblyOf<AbpSettingsDomainModule>();
}
}
}

14
src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/ISettingRepository.cs

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace Volo.Abp.Settings
{
public interface ISettingRepository : IBasicRepository<Setting, Guid>
{
Task<Setting> FindAsync(string name, string entityType, string entityId);
Task<List<Setting>> GetListAsync(string entityType, string entityId);
}
}

48
src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/Setting.cs

@ -0,0 +1,48 @@
using System;
using JetBrains.Annotations;
using Volo.Abp.Domain.Entities;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.Settings
{
public class Setting : Entity<Guid>, IMultiTenant
{
public virtual Guid? TenantId { get; protected set; }
[NotNull]
public virtual string Name { get; protected set; }
[NotNull]
public virtual string Value { get; internal set; }
[CanBeNull]
public virtual string EntityType { get; protected set; }
[CanBeNull]
public virtual string EntityId { get; protected set; }
protected Setting()
{
}
public Setting(
Guid id,
[NotNull] string name,
[NotNull] string value,
[CanBeNull] string entityType = null,
[CanBeNull] string entityId = null,
Guid? tenantId = null)
{
Check.NotNull(name, nameof(name));
Check.NotNull(value, nameof(value));
Id = id;
Name = name;
Value = value;
EntityType = entityType;
EntityId = entityId;
TenantId = tenantId;
}
}
}

42
src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/SettingStore.cs

@ -0,0 +1,42 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Settings
{
public class SettingStore : AbpServiceBase, ISettingStore, ITransientDependency
{
private readonly ISettingRepository _settingRepository;
public SettingStore(ISettingRepository settingRepository)
{
_settingRepository = settingRepository;
}
public async Task<string> GetOrNullAsync(string name, string entityType, string entityId)
{
var setting = await _settingRepository.FindAsync(name, entityType, entityId);
return setting?.Value;
}
public async Task SetAsync(string name, string value, string entityType, string entityId)
{
var setting = await _settingRepository.FindAsync(name, entityType, entityId);
if (setting == null)
{
setting = new Setting(GuidGenerator.Create(), name, value, entityType, entityId, CurrentTenant.Id);
await _settingRepository.InsertAsync(setting);
}
setting.Value = value;
await _settingRepository.UpdateAsync(setting);
}
public async Task<List<SettingValue>> GetListAsync(string entityType, string entityId)
{
var setting = await _settingRepository.GetListAsync(entityType, entityId);
return setting.Select(s => new SettingValue(s.Name, s.Value)).ToList();
}
}
}

21
src/Volo.Abp.Settings.EntityFrameworkCore/Volo.Abp.Settings.EntityFrameworkCore.csproj

@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>Volo.Abp.Settings.EntityFrameworkCore</AssemblyName>
<PackageId>Volo.Abp.Settings.EntityFrameworkCore</PackageId>
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.EntityFrameworkCore\Volo.Abp.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\Volo.Abp.Settings.Domain\Volo.Abp.Settings.Domain.csproj" />
</ItemGroup>
</Project>

16
src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/AbpSettingsDbContext.cs

@ -0,0 +1,16 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
namespace Volo.Abp.Settings.EntityFrameworkCore
{
public class AbpSettingsDbContext : AbpDbContext<AbpSettingsDbContext>, IAbpSettingsDbContext
{
public DbSet<Setting> Settings { get; set; }
public AbpSettingsDbContext(DbContextOptions<AbpSettingsDbContext> options)
: base(options)
{
}
}
}

22
src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/AbpSettingsEntityFrameworkCoreModule.cs

@ -0,0 +1,22 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity;
namespace Volo.Abp.Settings.EntityFrameworkCore
{
[DependsOn(typeof(AbpSettingsDomainModule))]
[DependsOn(typeof(AbpSettingsEntityFrameworkCoreModule))]
public class AbpSettingsEntityFrameworkCoreModule : AbpModule
{
public override void ConfigureServices(IServiceCollection services)
{
services.AddAbpDbContext<AbpSettingsDbContext>(options =>
{
options.AddDefaultRepositories<IAbpSettingsDbContext>();
options.AddRepository<Setting, EfCoreSettingRepository>();
});
services.AddAssemblyOf<AbpSettingsEntityFrameworkCoreModule>();
}
}
}

28
src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/EfCoreSettingRepository.cs

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
namespace Volo.Abp.Settings.EntityFrameworkCore
{
public class EfCoreSettingRepository : EfCoreRepository<IAbpSettingsDbContext, Setting, Guid>, ISettingRepository
{
public EfCoreSettingRepository(IDbContextProvider<IAbpSettingsDbContext> dbContextProvider)
: base(dbContextProvider)
{
}
public async Task<Setting> FindAsync(string name, string entityType, string entityId)
{
return await DbSet.FirstOrDefaultAsync(s => s.Name == name && s.EntityType == entityType && s.EntityId == entityId);
}
public async Task<List<Setting>> GetListAsync(string entityType, string entityId)
{
return await DbSet.Where(s => s.EntityType == entityType && s.EntityId == entityId).ToListAsync();
}
}
}

10
src/Volo.Abp.Settings.EntityFrameworkCore/Volo/Abp/Settings/EntityFrameworkCore/IAbpSettingsDbContext.cs

@ -0,0 +1,10 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
namespace Volo.Abp.Settings.EntityFrameworkCore
{
public interface IAbpSettingsDbContext : IEfCoreDbContext
{
DbSet<Setting> Settings { get; set; }
}
}

20
src/Volo.Abp.Settings/Volo.Abp.Settings.csproj

@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>Volo.Abp.Settings</AssemblyName>
<PackageId>Volo.Abp.Settings</PackageId>
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.Core\Volo.Abp.Core.csproj" />
</ItemGroup>
</Project>

13
src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs

@ -0,0 +1,13 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity;
namespace Volo.Abp.Settings
{
public class AbpSettingsModule : AbpModule
{
public override void ConfigureServices(IServiceCollection services)
{
services.AddAssemblyOf<AbpSettingsModule>();
}
}
}

21
src/Volo.Abp.Settings/Volo/Abp/Settings/CurrentTenantSettingContributor.cs

@ -0,0 +1,21 @@
using System.Threading.Tasks;
namespace Volo.Abp.Settings
{
public class CurrentTenantSettingContributor : ISettingContributor
{
private readonly ISettingStore _settingStore;
public CurrentTenantSettingContributor(ISettingStore settingStore)
{
_settingStore = settingStore;
}
public async Task<string> GetOrNull(string name)
{
//Optimization: Get all Tenant-42 settings and cache it!
var tenantId = 42; //Get from current tenant
return await _settingStore.GetOrNullAsync(name, "Tenant", tenantId.ToString());
}
}
}

20
src/Volo.Abp.Settings/Volo/Abp/Settings/DefaultSettingContributor.cs

@ -0,0 +1,20 @@
using System.Threading.Tasks;
namespace Volo.Abp.Settings
{
public class DefaultSettingContributor : ISettingContributor
{
private readonly ISettingStore _settingStore;
public DefaultSettingContributor(ISettingStore settingStore)
{
_settingStore = settingStore;
}
public async Task<string> GetOrNull(string name)
{
//Optimization: Get all settings and cache it!
return await _settingStore.GetOrNullAsync(name, null, null);
}
}
}

9
src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingContributor.cs

@ -0,0 +1,9 @@
using System.Threading.Tasks;
namespace Volo.Abp.Settings
{
public interface ISettingContributor
{
Task<string> GetOrNull(string name);
}
}

20
src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingManager.cs

@ -0,0 +1,20 @@
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Volo.Abp.Settings
{
public interface ISettingManager
{
Task<string> GetOrNullAsync(string name);
Task<string> GetOrNullAsync(string name, string entityType, string entityId, bool fallback = true);
Task<List<SettingValue>> GetAllAsync();
Task<List<SettingValue>> GetAllAsync(string entityType, string entityId, bool fallback = true);
Task SetAsync(string name, string value);
Task SetAsync(string name, string value, string entityType, string entityId);
}
}

15
src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingStore.cs

@ -0,0 +1,15 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using JetBrains.Annotations;
namespace Volo.Abp.Settings
{
public interface ISettingStore
{
Task<string> GetOrNullAsync([NotNull] string name, [CanBeNull] string entityType, [CanBeNull] string entityId);
Task SetAsync([NotNull] string name, [NotNull] string value, [CanBeNull] string entityType, [CanBeNull] string entityId);
Task<List<SettingValue>> GetListAsync([CanBeNull] string entityType, [CanBeNull] string entityId);
}
}

49
src/Volo.Abp.Settings/Volo/Abp/Settings/SettingManager.cs

@ -0,0 +1,49 @@
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Volo.Abp.Settings
{
public class SettingManager : ISettingManager
{
public Task<string> GetOrNullAsync(string name)
{
return GetOrNullAsync(name, null, null);
}
public Task<string> GetOrNullAsync(string name, string entityType, string entityId, bool fallback = true)
{
var contributors = new List<ISettingContributor>();
foreach (var contributor in contributors)
{
var value = contributor.GetOrNull(name);
if (value != null)
{
return value;
}
}
return null;
}
public Task<List<SettingValue>> GetAllAsync()
{
throw new System.NotImplementedException();
}
public Task<List<SettingValue>> GetAllAsync(string entityType, string entityId, bool fallback = true)
{
throw new System.NotImplementedException();
}
public Task SetAsync(string name, string value)
{
throw new System.NotImplementedException();
}
public Task SetAsync(string name, string value, string entityType, string entityId)
{
throw new System.NotImplementedException();
}
}
}

22
src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValue.cs

@ -0,0 +1,22 @@
namespace Volo.Abp.Settings
{
public class SettingValue : NameValue
{
/// <summary>
/// Creates a new <see cref="NameValue"/>.
/// </summary>
public SettingValue()
{
}
/// <summary>
/// Creates a new <see cref="NameValue"/>.
/// </summary>
public SettingValue(string name, string value)
{
Name = name;
Value = value;
}
}
}
Loading…
Cancel
Save