在C#中使用AppConfig文件中的值

5
selenium = new DefaultSelenium(
    ConfigurationManager.AppSettings["TestMachine"].ToString(),
    4444,       
    ConfigurationManager.AppSettings["Browser"].ToString(),        
    ConfigurationManager.AppSettings["URL"].ToString()
);

有没有更有效的方法来做这件事,而不是重复以下步骤:

ConfigurationManager.AppSettings[""].ToString()

我猜你可以创建一个带有静态方法的新类,我很好奇其他人有什么想法 :). - Kevin
这感觉就像我尝试讨好我的教授时的情况。他让我使用更多的方法,所以我写了一个缩短了Console.WriteLine()的方法。这完全是不必要的,也没有任何帮助。 - MAW74656
8个回答

4

我认为更好的方法是编写一个包装类来处理所有与配置相关的事情,特别是如果你编写测试。一个简单的例子可能是:

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"]

1

您可以进入项目属性并添加设置,然后使用以下代码进行读取: Properties.Settings.Default.Property


1
如果您想要具有强类型引用,可以从ConfigurationSection/ConfigurationElementCollectionConfigurationElement继承。

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


1

是的,你可以做到

ConfigurationManager.AppSettings[""]

由于它已经是一个字符串。

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


1
我通常为每个应用程序创建一个配置类,它包装了对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)公开数字/布尔配置条目
  • 我可以在一个中心位置记录所有配置条目的文档

0
编写一个帮助函数来获取参数。为了良好的编码实践,您需要首先检查键是否实际存在。

0

从配置文件中提取信息的唯一“更有效”的方法是消耗整个部分,然后迭代您所需的内容。由于最终会得到循环代码,因此它不太可能比您现在拥有的方法更有效。

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


0

你可能需要在类名上更具创意,但可以沿用类似于以下的方式:

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

@Maya:在方法内部一定要检查空指针 :)。 - Kevin
好的,那么您也可以重载该方法以接受并返回一个字符串数组。这样可以一次获取多个元素而无需遍历整个集合。 - MAW74656

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接