using System.Text.Json; namespace BoardApp.Config; public sealed class BoardConfigLoader { private readonly JsonSerializerOptions _jsonOpts = new() { PropertyNameCaseInsensitive = true }; public string ConfigDir { get { var env = Environment.GetEnvironmentVariable("BOARD_CONFIG_DIR"); if (!string.IsNullOrWhiteSpace(env)) { return Path.GetFullPath(env); } return Path.Combine(Directory.GetCurrentDirectory(), "config"); } } private T ReadJson(string file) { var full = Path.Combine(ConfigDir, file); var raw = File.ReadAllText(full); var obj = JsonSerializer.Deserialize(raw, _jsonOpts); if (obj is null) throw new InvalidOperationException($"无法解析配置文件: {full}"); return obj; } private void WriteJson(string file, T data) { var full = Path.Combine(ConfigDir, file); var text = JsonSerializer.Serialize(data, new JsonSerializerOptions(_jsonOpts) { WriteIndented = true }) + "\n"; File.WriteAllText(full, text); } public AppConfig LoadAppConfig() => ReadJson("app.config.json"); public LdapConfig LoadLdapConfig() => ReadJson("ldap.config.json"); public PagesConfig LoadPagesConfig() => ReadJson("pages.config.json"); public SystemScenariosConfig LoadSystemScenariosConfig() => ReadJson("scenarios.system.json"); public UserScenariosConfig LoadUserScenariosConfig() => ReadJson("scenarios.users.json"); public SqlServerConfig LoadSqlServerConfig() => ReadJson("sqlserver.config.json"); public DataSrcConfig LoadDataSrcConfig() => ReadJson("datasrc.json"); public void WriteUserScenariosConfig(UserScenariosConfig cfg) => WriteJson("scenarios.users.json", cfg); }