C# 建议使用什么方法将数据一次性加载到应用程序中的任何位置?

C# 建议使用什么方法将数据一次性加载到应用程序中的任何位置?,c#,asp.net-core,asp.net-core-2.0,C#,Asp.net Core,Asp.net Core 2.0,由于几乎每个项目都有一些预定义的设置值,这些值将在整个应用程序中使用,建议使用什么方法加载它们一次,然后到处使用 例如,我做了一个项目,其中数据库中存储了一些设置,这些设置在整个应用程序中都可以访问。我不是每次都查询它们,而是将所有内容加载到一个静态类中,然后在整个应用程序中使用它。你还使用什么方法 如果您有一个从数据库检索设置的类: public class SqlSettingsProvider : ISettingsProvider { private readonly strin

由于几乎每个项目都有一些预定义的设置值,这些值将在整个应用程序中使用,建议使用什么方法加载它们一次,然后到处使用


例如,我做了一个项目,其中数据库中存储了一些设置,这些设置在整个应用程序中都可以访问。我不是每次都查询它们,而是将所有内容加载到一个静态类中,然后在整个应用程序中使用它。你还使用什么方法

如果您有一个从数据库检索设置的类:

public class SqlSettingsProvider : ISettingsProvider
{
    private readonly string _connectionString;

    public SqlSettingsProvider(string connectionString)
    {
        _connectionString = connectionString;
    }

    public Settings GetSettings()
    {
        // load the settings from SQL
    }
}
您可以使用
服务集合注册该类

var connectionString = "xyz"; // load this from config;
services.AddSingleton<SqlSettingsProvider>(provider => 
    new SqlSettingsProvider(connectionString));
现在,无论您需要什么
设置
,只需注入它们即可:

public class SomeControllerOrOtherClass
{
    private readonly Settings _settings;

    public SomeControllerOrOtherClass(Settings settings)
    {
        _settings = settings;
    }
}
现在,您的类可以只依赖于
设置
,而不关心它来自何处。服务集合只创建它一次,然后每次返回同一个实例,这意味着它只从数据库中查找一次


注入像
ISettingsProvider这样的接口可能有一些长期的好处。这给了你更多的灵活性。例如,它可以在指定的时间段内缓存设置,而不是在应用程序的生命周期内存储设置,或者以其他方式进行不同的操作

您可以向需要这些设置的类中注入类似于ISettingsProvider的工厂。然后,您可以使用检索设置并将其缓存在内存中的实现来返回相同的实例,而不是重新加载它们。您甚至可以在需要的地方插入设置类,并将容器配置为解析
ISettingsProvider
,然后使设置类返回单例。您还可以创建从数据库读取的自定义配置提供程序。见:
public class SomeControllerOrOtherClass
{
    private readonly Settings _settings;

    public SomeControllerOrOtherClass(Settings settings)
    {
        _settings = settings;
    }
}