using Microsoft.Extensions.Options; using RobotNet10.CustomConfiguration.Events; using RobotNet10.CustomConfiguration.Models; using RobotNet10.StorageManager; namespace RobotNet10.CustomConfiguration.Services; /// /// Service implementation cho quản lý configuration files /// Sử dụng StorageManager để lưu trữ file JSON /// public partial class ConfigService : IConfigService, IDisposable { private readonly StorageManager.StorageManager _storageManager; private const string ConfigPath = "configs"; // Path trong StorageManager private const string ConfigFileExtension = ".config.json"; // Extension cho config files private const string StorageConfigsKey = "StorageConfigs"; // Named options key cho IOptionsMonitor // ========================================== // EVENTS // ========================================== public event EventHandler? ConfigChanged; public ConfigService(IOptionsMonitor optionsSnapshot) { var config = optionsSnapshot.Get(StorageConfigsKey); ArgumentNullException.ThrowIfNull(config); _storageManager = new StorageManager.StorageManager(config); } /// /// Trigger ConfigChanged event /// protected virtual void OnConfigChanged(ConfigFile config, ConfigChangeType changeType, string? variableName = null) { var args = new ConfigChangedEventArgs { ConfigType = config.ConfigType, ConfigId = config.Id, ChangeType = changeType, VariableName = variableName }; ConfigChanged?.Invoke(this, args); } public void Dispose() { _storageManager?.Dispose(); GC.SuppressFinalize(this); } }