【问题标题】:Wrapping of Application Settings in a Web Application在 Web 应用程序中包装应用程序设置
【发布时间】:2013-06-07 07:16:09
【问题描述】:

我在 ASP.NET MVC 4 项目的 Web.Config 中有此应用程序设置。

  <appSettings>
        ...
    <add key="GridSize" value="12" />
  </appSettings>

我只在这样一个地方使用它

int gridSize = int.Parse(ConfigurationManager.AppSettings["GridSize"]);

如果我想在我的代码中的更多地方使用它,推荐的方法是什么?

是否值得为此使用包装器,以便整数解析仅在一个地方完成?

只是想举一些例子来说明这种事情的一般方法是什么。

谢谢

【问题讨论】:

  • AppSettings 不映射到 applicationSettings 部分。你的例子有些不对劲
  • @Steve 是的,你说得对,我在发布后注意到了这一点。我很快就会更新它:-)这个问题仍然存在希望。

标签: .net configuration web-config


【解决方案1】:

在给出我的答案之前,我希望记住使用 app.config 的推荐方法是通过 applicationSettingsuserSettings 部分。这些部分允许存储和检索配置属性,而不会出现将字符串转换为特定数据类型的问题。
您的示例,如果使用 SerializeAs="Integer" 存储在 applicationSettings 中,则可以使用 GridSize 配置回读

int size = Properties.Settings.Default.GridSize; //no conversion needed here 

但是,如果您仍想使用 obsolete appSettings 部分,那么我建议创建一个静态 ConfigurationUtility 类,其中包含您的配置值以及您可以集中处理这些值的位置(包括保存和加载操作)

public static class ConfigurationUtility
{
      private static int _gridSize = -1;  // default for not initialized

      public static int GridSize
      {
          get
          {
              if(_gridSize == -1)
                  _gridSize = Int.Parse(ConfigurationManager.AppSettings["GridSize"])
              return _gridSize;
          }
      }
}

这只是一个例子,需要更健壮的代码来处理缺少键的预期数据类型的无效值等情况

【讨论】:

  • 我最初使用的是setting.Settings 文件,它允许我使用Properties.Settings.Default.GridSize 执行您上面建议的操作。一位同事告诉我不要将其用于他们的 Web 应用程序,因为它增加了一层额外的晦涩性。但是,我仍然认为它比使用ConfigurationManager 更有优势?例如,这是否应该用于ConnectionString?感谢您的示例,并表明另一种选择是编写您自己的 ConfigurationUtility 类。
  • 如果你真的想深入研究这个话题,我建议你阅读these serie of articles
猜你喜欢
  • 2012-11-30
  • 1970-01-01
  • 2013-12-17
  • 2014-03-28
  • 2019-02-12
  • 1970-01-01
  • 2011-06-21
  • 2014-05-12
  • 2012-09-24
相关资源
最近更新 更多