using Microsoft.Extensions.Logging; using Tiger.Storage; namespace Tiger.Game.Settings; public class SettingManager : ISettingManager { private IReadOnlyDictionary _settings; private readonly IRepository _settingRepository; private readonly ILogger _logger; public SettingManager(IRepository settingRepository, ILogger logger) { _settingRepository = settingRepository; _logger = logger; _settings = new Dictionary(); } public async Task ReloadSettingsAsync() { _settings = (await _settingRepository.FindByAsync()).ToDictionary(s => s.Key, s => s.Value); _logger.LogInformation("Loaded {Count} settings", _settings.Count); } public T GetSetting(string key) { if (!_settings.TryGetValue(key, out var value)) throw new KeyNotFoundException($"No setting found with key '{key}'"); if (value is T castedValue) return castedValue; throw new InvalidCastException($"Setting '{key}' is not of type '{typeof(T)}'"); } }