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<T>(string file)
|
{
|
var full = Path.Combine(ConfigDir, file);
|
var raw = File.ReadAllText(full);
|
var obj = JsonSerializer.Deserialize<T>(raw, _jsonOpts);
|
if (obj is null) throw new InvalidOperationException($"无法解析配置文件: {full}");
|
return obj;
|
}
|
|
private void WriteJson<T>(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<AppConfig>("app.config.json");
|
public LdapConfig LoadLdapConfig() => ReadJson<LdapConfig>("ldap.config.json");
|
public PagesConfig LoadPagesConfig() => ReadJson<PagesConfig>("pages.config.json");
|
public SystemScenariosConfig LoadSystemScenariosConfig() => ReadJson<SystemScenariosConfig>("scenarios.system.json");
|
public UserScenariosConfig LoadUserScenariosConfig() => ReadJson<UserScenariosConfig>("scenarios.users.json");
|
public SqlServerConfig LoadSqlServerConfig() => ReadJson<SqlServerConfig>("sqlserver.config.json");
|
public DataSrcConfig LoadDataSrcConfig() => ReadJson<DataSrcConfig>("datasrc.json");
|
|
public void WriteUserScenariosConfig(UserScenariosConfig cfg) => WriteJson("scenarios.users.json", cfg);
|
}
|
|