Database 如何减少对Layout.NET Core的查询

Database 如何减少对Layout.NET Core的查询,database,caching,razor,layout,.net-core,Database,Caching,Razor,Layout,.net Core,我创建了一个类来获取我的网站设置。在此设置表中,我存储电话号码、电子邮件地址、地址等。管理员用户可以更改其设置 public interface IAppGlobalVariableService { Task<List<Configuration>> GetAllConfig(); Task<string> GetValue(string name); } public class AppGlobalVariablesService : I

我创建了一个类来获取我的网站设置。在此设置表中,我存储电话号码、电子邮件地址、地址等。管理员用户可以更改其设置

public interface IAppGlobalVariableService
{
    Task<List<Configuration>> GetAllConfig();
    Task<string> GetValue(string name);
}

public class AppGlobalVariablesService : IAppGlobalVariableService
{
    private readonly IRepository<Configuration> _configRepository;
    private static Task<List<Configuration>> _configList;

    public AppGlobalVariablesService(IRepository<Configuration> configRepository)
    {
        _configRepository = configRepository;
        _configList = GetAllConfig();
    }

    public async Task<List<Configuration>> GetAllConfig()
    {
        return await _configRepository.GetAll().ToListAsync();
    }

    public Task<string> GetValue(string name)
    {
        return GetConfigByName(name);
    }

    private static async Task<string> GetConfigByName(string name)
    {
        var configList = await _configList;
        return configList.FirstOrDefault(x => x.ConfigName == name)?.ConfigValue;
    }
}
我注射了!

@inject IAppGlobalVariableService AppConfig
我将在大多数情况下使用此代码。你有没有办法减少对DotnetCore2.2的查询?我可以做一些类似于查询数据库一次的事情来获取变量吗。和存储缓存

更新: 我更新了startup.cs文件(AddTransient到addscope),它还原了查询。但是我想学习我可以使用单一查询吗

services.AddScoped<IAppGlobalVariableService, AppGlobalVariablesService>();
services.addScope();

使用
AddScoped
,而不是使用
AddSingleton
。我使用了,但收到了一个错误。“无法从Singleton使用作用域服务”关于
IRepository
?如果它是
范围内的
瞬态的
,那么您得到的错误就是因为它。
Singleton
无法引用范围为
的实例。
services.AddScoped<IAppGlobalVariableService, AppGlobalVariablesService>();