35 lines
1.0 KiB
C#
35 lines
1.0 KiB
C#
using Microsoft.Extensions.Logging;
|
|
|
|
namespace Tiger.Game.Settings;
|
|
|
|
public class SettingsManager : ISettingsManager
|
|
{
|
|
private IReadOnlyDictionary<string, object> _settings;
|
|
private readonly ISettingsDao _settingsDao;
|
|
private readonly ILogger<ISettingsManager> _logger;
|
|
|
|
public SettingsManager(ISettingsDao settingsDao, ILogger<ISettingsManager> logger)
|
|
{
|
|
_settingsDao = settingsDao;
|
|
_logger = logger;
|
|
_settings = new Dictionary<string, object>();
|
|
}
|
|
|
|
public async Task ReloadSettingsAsync()
|
|
{
|
|
_settings = await _settingsDao.GetSettingsAsync();
|
|
|
|
_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)}'");
|
|
}
|
|
} |