C# 在asp.net web应用程序中处理配置设置
我有一个具有200多个配置设置的web应用程序。它们控制从UI到业务逻辑的一切 这些应该在应用程序启动时检索还是在需要时检索 如果需要,它们应该被注入ISettings接口 你的意见是什么 更新: 它们可以在应用程序中打开和关闭,以便存储在数据库中。有些是按用户设置的,有些是应用程序范围的。现在有什么想法?每个ISettings用于在VS工具->选项中托管设置。似乎不是一个很好的web应用程序候选人。C# 在asp.net web应用程序中处理配置设置,c#,asp.net,configuration,C#,Asp.net,Configuration,我有一个具有200多个配置设置的web应用程序。它们控制从UI到业务逻辑的一切 这些应该在应用程序启动时检索还是在需要时检索 如果需要,它们应该被注入ISettings接口 你的意见是什么 更新: 它们可以在应用程序中打开和关闭,以便存储在数据库中。有些是按用户设置的,有些是应用程序范围的。现在有什么想法?每个ISettings用于在VS工具->选项中托管设置。似乎不是一个很好的web应用程序候选人。 通常使用ConfigurationManager.Appsettings[“keyname”]
通常使用ConfigurationManager.Appsettings[“keyname”]按需加载应用程序设置,以获取指定密钥的最新值。如果您确信在应用程序处于活动状态时该值永远不会更改,则始终可以在应用程序启动时缓存该设置,但每次使用ConfigurationManager.AppSettings[“keyname”]从web.Confg读取该设置的好处是,ASP.NET运行时将检测到对web.config的更改(例如,当您修改应用程序设置值时)并为您提供密钥的最新值。我会根据需要检索它。ASP.NET会自动为您缓存此数据。它不会每次读取一个文件。请尝试在web.config文件运行时更改它,您将看到它会终止您的所有会话并有效地重置您的应用程序 不要过于复杂化。web.config中这些设置的目的是用于您需要访问的整个应用程序中的设置。MS为您提供了访问这些设置的库,并已完成了使该过程尽可能快的工作。如果您有数千个设置或其他设置,您可能是一个我们无法找到更好的缓存算法,但这种情况很少见 将您的时间花在代码的其他部分上,因为更改您访问web.config应用程序设置的方式并没有什么好处 更新:
如果设置是应用程序范围内的,则使用web.config。如果设置是用户特定的并存储在数据库中,则在登录时将其存储在用户的会话中。有些人说将cookie用于用户特定的设置,但如果您知道用户是谁,则最好使用会话,因为它可以防止大cookie被发回我们也有很多配置设置。我们将它们存储在一个中央数据库表中。在第一次访问时,我们从数据库中加载它们,并将它们存储在缓存中,绝对过期时间为1分钟。这允许我们在内存中复制配置设置,同时让我们推送我们知道最多在1分钟内应用的配置更新 所以,这是一种混合。在第一次请求配置设置时,它们都被加载并存储在缓存中。这个操作非常轻,所以让它每分钟都发生对我们来说不是什么大问题
您的里程数可能会有所不同。我同意Kelsey的观点,不要使事情过于复杂,只需使用.NET framework类来检索值。Web.config通常是保存这些值的地方。
但是,我建议为access创建一个简单的静态类:
using System.Configuration // Add a reference for this... ;
public static class Config
{
public static string DbConnection
{
get
{
return ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
}
}
public static string SomeValue
{
get
{
return ConfigurationManager.AppSettings["SomeValue"].ToString();
}
}
}
它将为您提供强类型值和轻松访问。您还可以使用这样的类执行某种验证。非常方便。
如果您以后决定不使用web.config,则该类很容易更改,以便在其他位置检索值。这似乎更像我们希望执行的操作。一个数据库中的200行检索不会花费那么长时间。您是否只有一个缓存,其中包含配置设置的对象?