using Infrastructure.Application.Entites.Settings; using Microsoft.Extensions.Caching.Distributed; using System.Linq; using Infrastructure.Extensions; using System.Globalization; using System; namespace Infrastructure.Application.Services.Settings { public class CachedSettingService : ISettingService { private readonly IDistributedCache _cache; private readonly SettingService _settingService; private readonly string _keyTemplate = "iot-setting-{0}"; public CachedSettingService(IDistributedCache cache, SettingService settingService) { this._cache = cache; this._settingService = settingService; } public Setting GetSetting(string name) { var key = string.Format(CultureInfo.InvariantCulture, _keyTemplate, name); var setting = this._cache.Get(key); if (setting == null) { setting = this._settingService.GetSetting(name); _cache.Set(key, setting); } return setting; } public void AddSetting(Setting setting) { this._settingService.AddSetting(setting); } public void DeleteSetting(Setting setting) { if (setting is null) { throw new ArgumentNullException(nameof(setting)); } this._settingService.DeleteSetting(setting); var key = string.Format(CultureInfo.InvariantCulture, _keyTemplate, setting.Name); this._cache.Remove(key); } public void UpdateSetting(Setting setting) { if (setting is null) { throw new ArgumentNullException(nameof(setting)); } this._settingService.UpdateSetting(setting); var key = string.Format(CultureInfo.InvariantCulture, _keyTemplate, setting.Name); this._cache.Remove(key); } public IQueryable Table() { return _settingService.Table(); } public IQueryable ReadonlyTable() { return _settingService.ReadonlyTable(); } } }