处理asp.net Web应用程序中的配置设置

时间:2009-10-22 04:19:28

标签: c# asp.net configuration

我有一个包含200多个配置设置的Web应用程序。它们控制从UI到业务逻辑的所有内容。

应该在应用程序启动时还是在需要时检索它们?

在需要时是否应注入ISettings接口。

你的意见是什么?

更新 这些可以在应用程序中打开和关闭,因此它们存储在数据库中。有些是按用户设置,有些是应用程序范围。现在想想?

4 个答案:

答案 0 :(得分:6)

我会根据需要检索它。 ASP.NET自动为您缓存此数据。它不是每次都读取文件。尝试在运行时更改web.config文件,您将看到它会终止所有会话并有效地重置您的应用。

不要过于复杂。 web.config中这些设置的目的是用于您需要访问的整个应用程序的设置。 MS为您提供了访问它们的库,并完成了尽可能快地完成该过程的工作。也许如果您有数以千计的设置或某些东西,您可能会找到更好的缓存算法,但这种情况很少见。

将时间花在代码的其他部分上,因为在更改访问web.config应用设置的方式方面没什么好处。

<强>更新 如果设置是应用程序范围,则使用web.config。如果它们是用户特定的并存储在数据库中,则在登录时将它们存储在用户的会话中。有人说使用cookie用于特定于用户的设置,但如果您知道用户是谁,那么使用会话要好得多,因为它防止大cookie随着该用户的每个请求被发回服务器。

答案 1 :(得分:4)

我同意Kelsey,不要过于复杂化,只需使用.NET框架类来检索值。 Web.config通常是你保留它们的地方 但是我建议创建一个简单的静态类来进行访问:

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,则可以轻松更改此类以在其他位置检索值。

答案 2 :(得分:0)

Per MSDN ISettings用于在VS Tools中托管设置 - &gt;选项。似乎不适合Web应用程序。 通常,使用ConfiguraionManager.Appsettings [“keyname”]按需加载应用程序设置以获取指定键的最新值。如果您确定在应用程序处于活动状态时该值永远不会更改,则可以始终在Application_start上缓存该设置,但每次使用ConfigurationManager.AppSettings [“keyname”]从web.Confg读取它的好处是ASP.NET运行时将检测对web.config的更改(例如,当您修改应用程序设置值时)并为您提供该项的最新值。

答案 3 :(得分:0)

我们也有很多配置设置。我们将它们存储在中央数据库表中。在第一次访问时,我们从数据库加载它们并将它们存储在Cache中,绝对到期时间为1分钟。这使我们可以拥有配置设置的内存副本,同时还允许我们推送最多1分钟内应用的配置更新。

所以,它是一种混合体。在第一次配置设置请求时,它们都被加载并存储在Cache中。这个操作非常轻巧,所以每分钟都有这个操作对我们来说不是什么大问题。

您的里程可能会有所不同。