【问题标题】:Using values from AppConfig file in C#在 C# 中使用 App Config 文件中的值
【发布时间】:2011-09-10 22:23:17
【问题描述】:
selenium = new DefaultSelenium(
    ConfigurationManager.AppSettings["TestMachine"].ToString(),
    4444,       
    ConfigurationManager.AppSettings["Browser"].ToString(),        
    ConfigurationManager.AppSettings["URL"].ToString()
);

有没有一种有效的方法来做到这一点,而不是重复:

ConfigurationManager.AppSettings[""].ToString()

【问题讨论】:

  • 我猜你可以用静态方法创建一个新类,我很好奇其他人要说什么:)。
  • 这感觉就像我试图让我的教授满意。他告诉我要使用更多的方法,所以我写了一个缩短了 Console.WriteLine() 的方法。这是完全没有必要的,也没有任何帮助。

标签: c# visual-studio selenium app-config


【解决方案1】:

如果你想有强类型引用,你可以从ConfigurationSection/ConfigurationElementCollectionConfigurationElement继承。

您可以使用[ConfigurationProperty("key", IsRequired = true, DefaultValue = "*^%)(@")][StringValidator(MinLength = 3)] 等验证器将默认值指定为ConfigurationElement

【讨论】:

    【解决方案2】:

    我认为一个更好的主意是为所有处理配置的东西编写一个包装类,尤其是在您编写测试时。一个简单的例子可能是:

    public interface IConfigurationService
    {
        string GetValue(string key);
    }
    

    这种方法将允许您在需要时模拟您的配置并降低复杂性

    所以你可以继续:

    public void SelTest(IConfigurationService config)
    {
        var selenium = new DefaultSelenium(config.GetValue("TestMachine"),
            4444, config.GetValue("Browser"), config.GetValue("URL"));
    }
    

    或者您可以从 List 继承您的配置并将输入减少到:

    config["Browser"]
    

    【讨论】:

      【解决方案3】:

      我总是为每个应用程序创建一个配置类,它包装对 app/web.config 文件的访问并将配置条目作为属性公开。例如。像这样:

      public static class MyConfig
      {
          /// documentation of config entry
          public static string Browser
          {
            get { return Read("Browser", "some default value"); }
          }
      
          /// documentation of config entry
          public static int Port
          {
            get { return int.Parse(Read("Browser", "80")); }
          }
      
          public static string Read(string entry, string defaultValue)
          {
              var entry = ConfigurationManager.AppSettings[entry];
              return string.IsNullOrEmpty(entry) ? defaultValue : entry;
          }
      }
      

      这有几个优点:

      • 我可以定义默认值(例如,如果配置条目是可选的/缺少的)
      • 我可以以正确的类型(int、bool)公开数字/布尔配置条目
      • 我可以在一个中心位置记录所有配置条目

      【讨论】:

        【解决方案4】:

        你可能需要在类名方面更有创意,但你可以按照以下方式做一些事情:

        class ConfigManager
        {
            public static string GetSetting(string name)
            {
                return ConfigurationManager.AppSettings[name].ToString();
            }
        }
        

        【讨论】:

        • @Maya:请务必检查方法内的空指针:)。
        • 好的,那么你也可以重载方法来接受并返回一个字符串数组。一次获取多个而不遍历整个集合。
        【解决方案5】:

        从配置文件中提取的唯一“更有效”的方式是使用整个部分,然后遍历您想要的内容。当您最终使用循环代码时,它不太可能比您现在使用的方法更有效。

        一种用于简化的模式是创建一个“应用程序设置”单例并在应用程序加载时加载。您基本上创建了一个字符串、字符串的通用哈希表(字典等),因此您可以更轻松地完成查找。但是仍然存在翻阅应用设置部分的开销。

        【讨论】:

          【解决方案6】:

          编写一个辅助函数来获取参数。您需要首先检查密钥是否确实存在,以便进行良好的编码实践。

          【讨论】:

            【解决方案7】:

            您可以转到项目的属性并添加设置,然后阅读它: Properties.Settings.Default.Property

            【讨论】:

              【解决方案8】:

              是的,你可以这样做

              ConfigurationManager.AppSettings[""]
              

              因为它已经是一个字符串了。

              如果您在多个地方使用 ConfigurationManager.AppSettings["Something"],您应该创建一个静态 Config 类,该类通过静态属性读取您的 AppSettings。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2013-06-30
                • 2010-12-24
                • 2022-01-11
                • 2023-02-24
                • 2013-02-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多