是从内存还是从web.config文件中读取AppSetting值?

时间:2013-10-17 08:42:17

标签: c#-4.0 asp.net-mvc-4

如果我得到这样的值:

string value = ConfigurationManager.AppSettings["Key"];

我期待.Net(在我的情况下是MVC4)在App Domain启动时解析了应用程序设置,而我实际上是从内存中读取的。

如果情况并非如此,那么每次获取AppSettings都会保证线程安全吗?

快速尝试锻炼我的Google-Fu让我失望。

我倾向于使用这种机制来填充构造函数中的实例字段:

public class MyThing 
{
  private readonly string thingValue;

  public MyThing() 
  {
    thingValue = ConfigurationManager.AppSettings["Key"];
  }
}

我们最近遇到了一个外部依赖失败的情况,因为他们遇到竞争条件并且“无法读取配置设置”。

这让我想知道:

  • 是AppSettings threadsafe?
  • readonly字符串模式是否提供了足够的保护?

1 个答案:

答案 0 :(得分:1)

而且,就像往常一样,几乎在我问这个问题时,我的google-fu就开始了:/

MSDN lists the AppSettings method

public static NameValueCollection AppSettings { get; }

但实际上没有提到线程安全。

但是,the page for the ConfigurationManager class有一个关于线程安全的部分说:

  

此类型的任何公共静态(在Visual Basic中为Shared)成员都是   线程安全。任何实例成员都不能保证是线程   安全

所以看来我列出的机制是线程安全的。我仍然有兴趣看到替代方法!