TigerEmu/Game/Settings/SettingManager.cs

36 lines
1.1 KiB
C#
Raw Normal View History

2023-09-23 11:11:07 +00:00
using Microsoft.Extensions.Logging;
2023-09-23 12:20:45 +00:00
using Tiger.Storage;
2023-09-23 11:11:07 +00:00
namespace Tiger.Game.Settings;
2023-09-23 12:20:45 +00:00
public class SettingManager : ISettingManager
2023-09-23 11:11:07 +00:00
{
2023-09-23 12:20:45 +00:00
private IReadOnlyDictionary<string, string> _settings;
private readonly IRepository<Setting> _settingRepository;
private readonly ILogger<ISettingManager> _logger;
2023-09-23 11:11:07 +00:00
2023-09-23 12:20:45 +00:00
public SettingManager(IRepository<Setting> settingRepository, ILogger<ISettingManager> logger)
2023-09-23 11:11:07 +00:00
{
2023-09-23 12:20:45 +00:00
_settingRepository = settingRepository;
2023-09-23 11:11:07 +00:00
_logger = logger;
2023-09-23 12:20:45 +00:00
_settings = new Dictionary<string, string>();
2023-09-23 11:11:07 +00:00
}
public async Task ReloadSettingsAsync()
{
2023-09-23 12:20:45 +00:00
_settings = (await _settingRepository.FindByAsync()).ToDictionary(s => s.Key, s => s.Value);
2023-09-23 11:11:07 +00:00
_logger.LogInformation("Loaded {Count} settings", _settings.Count);
}
public T GetSetting<T>(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)}'");
}
}