using System.IO;
using System.Text.Json;
using AxiOmron.PcbCheck.Options;
using AxiOmron.PcbCheck.Services.Interfaces;
namespace AxiOmron.PcbCheck.Services.Implementations;
///
/// 提供应用配置文件的读取与保存能力。
///
public sealed class AppConfigService : IAppConfigService
{
private static readonly JsonSerializerOptions JsonOptions = new()
{
PropertyNameCaseInsensitive = true,
WriteIndented = true
};
///
/// 读取当前应用配置。
///
/// 根配置对象。
public AppConfig Load()
{
var configPath = GetConfigPath();
if (!File.Exists(configPath))
{
var defaultConfig = new AppConfig();
Save(defaultConfig);
return defaultConfig;
}
var json = File.ReadAllText(configPath);
var config = JsonSerializer.Deserialize(json, JsonOptions);
return config ?? new AppConfig();
}
///
/// 保存当前应用配置。
///
/// 待保存的配置对象。
public void Save(AppConfig config)
{
ArgumentNullException.ThrowIfNull(config);
var configPath = GetConfigPath();
var directory = Path.GetDirectoryName(configPath);
if (!string.IsNullOrWhiteSpace(directory))
{
Directory.CreateDirectory(directory);
}
var json = JsonSerializer.Serialize(config, JsonOptions);
File.WriteAllText(configPath, json);
}
///
/// 获取主配置文件路径。
///
/// 配置文件绝对路径。
public string GetConfigPath()
{
return Path.Combine(AppContext.BaseDirectory, "appConfig.json");
}
}