Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在asp.net web应用程序中处理配置设置_C#_Asp.net_Configuration - Fatal编程技术网

C# 在asp.net web应用程序中处理配置设置

C# 在asp.net web应用程序中处理配置设置,c#,asp.net,configuration,C#,Asp.net,Configuration,我有一个具有200多个配置设置的web应用程序。它们控制从UI到业务逻辑的一切 这些应该在应用程序启动时检索还是在需要时检索 如果需要,它们应该被注入ISettings接口 你的意见是什么 更新: 它们可以在应用程序中打开和关闭,以便存储在数据库中。有些是按用户设置的,有些是应用程序范围的。现在有什么想法?每个ISettings用于在VS工具->选项中托管设置。似乎不是一个很好的web应用程序候选人。 通常使用ConfigurationManager.Appsettings[“keyname”]

我有一个具有200多个配置设置的web应用程序。它们控制从UI到业务逻辑的一切

这些应该在应用程序启动时检索还是在需要时检索

如果需要,它们应该被注入ISettings接口

你的意见是什么

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

每个ISettings用于在VS工具->选项中托管设置。似乎不是一个很好的web应用程序候选人。
通常使用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行检索不会花费那么长时间。您是否只有一个缓存,其中包含配置设置的对象?