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;
}
}