谢谢,根据您的回答,我试图制作一些可行的东西,但我不知道它是否非常相关。
这是我的设置类:
[Table("SETTING")]
public class Setting : BaseObject
{
[Key]
[StringLength(50)]
public string Key { get; set; }
[StringLength(50)]
public string Value { get; set; }
public e_SettingType Type { get; set; }
}
public enum e_SettingType
{
UNDEFINED,
BOOL,
BYTE,
CHAR,
DECIMAL,
DOUBLE,
FLOAT,
INT,
STRING,
}
还有我的服务:
public class SettingService
{
private const string CACHE_KEY = "CurrentSetting";
private readonly IMemoryCache _cache;
private readonly IBaseRepository<Setting> _setting;
public SettingService(IMemoryCache cache, IBaseRepository<Setting> setting)
{
_cache = cache;
_setting = setting;
}
public async Task<bool> GetBool(string key)
{
var settings = await GetFromCache();
if (settings != null && settings.Any(x => x.Key.Equals(key)))
return bool.Parse(settings.First(x => x.Key.Equals(key)).Value);
else
return default;
}
public async Task<string> GetString(string key)
{
var settings = await GetFromCache();
if (settings != null && settings.Any(x => x.Key.Equals(key)))
return settings.First(x => x.Key.Equals(key)).Value;
else
return default;
}
private async Task<List<Setting>> GetFromCache()
{
if (!_cache.TryGetValue(CACHE_KEY, out List<Setting> data))
{
var models = await _setting.FindAll();
data = models.ToList();
var cacheOptions = new MemoryCacheEntryOptions()
.SetAbsoluteExpiration(TimeSpan.FromMinutes(30));
_cache.Set(CACHE_KEY, data, cacheOptions);
return data;
}
else
return data;
}
}
我已经在 Startup.cs 中添加了这个
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<SettingService>();
}
为了在我看来使用我的设置,我使用这个:
@inject MyProject.Service.SettingService setting //top of view
进入我的视野:
@setting.GetString("MY_KEY").Result
但这有关系吗?还是好的做法?