ISettingProvider.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using VCommon.Collections;
  4. namespace VCommon.VApplication.Setting
  5. {
  6. public interface ISettingProvider
  7. {
  8. IReadOnlyDictionary<string, SettingDefinition> Settings { get; }
  9. ReadOnlyHashSet<string> ApplicationScopeNames { get; }
  10. ReadOnlyHashSet<string> TenantScopeNames { get; }
  11. ReadOnlyHashSet<string> UserScopeNames { get; }
  12. ReadOnlyHashSet<string> ScriptWritableNames { get; }
  13. IReadOnlyCollection<string> ScriptOutputNames { get; }
  14. IReadOnlyCollection<string> ApplicationScriptOutputNames { get; }
  15. }
  16. public abstract class SettingProviderBase : ISettingProvider
  17. {
  18. public IReadOnlyDictionary<string, SettingDefinition> Settings { get; }
  19. public ReadOnlyHashSet<string> ApplicationScopeNames { get; }
  20. public ReadOnlyHashSet<string> TenantScopeNames { get; }
  21. public ReadOnlyHashSet<string> UserScopeNames { get; }
  22. public ReadOnlyHashSet<string> ScriptWritableNames { get; }
  23. public IReadOnlyCollection<string> ScriptOutputNames { get; }
  24. public IReadOnlyCollection<string> ApplicationScriptOutputNames { get; }
  25. protected SettingProviderBase()
  26. {
  27. Settings = Init();
  28. var settingDefinitions = Settings.Values.ToArray();
  29. ApplicationScopeNames = settingDefinitions.Where(p => p.Scope == SettingScope.Application).Select(p => p.Name).ToHashSet();
  30. TenantScopeNames = settingDefinitions.Where(p => p.Scope == SettingScope.Tenant).Select(p => p.Name).ToHashSet();
  31. UserScopeNames = settingDefinitions.Where(p => p.Scope == SettingScope.User).Select(p => p.Name).ToHashSet();
  32. ScriptOutputNames = settingDefinitions.Where(p => p.ScriptAccess != SettingScriptAccess.None).Select(p => p.Name).ToArray();
  33. ScriptWritableNames = settingDefinitions.Where(p => p.ScriptAccess == SettingScriptAccess.ReadWrite).Select(p => p.Name).ToHashSet();
  34. ApplicationScriptOutputNames = settingDefinitions.Where(p => p.Scope == SettingScope.Application && p.ScriptAccess != SettingScriptAccess.None).Select(p => p.Name).ToArray();
  35. }
  36. protected abstract IReadOnlyDictionary<string, SettingDefinition> Init();
  37. }
  38. }