如何从app.config将字典加载到控制台应用程序中?

时间:2010-08-18 20:36:08

标签: c# .net vb.net configuration

我想在app.config的控制台应用中启动时加载字典。

我知道我可以使用xml库或linq to XML来加载它来解析和遍历它。我的问题是有一种建立的方式。

是否有某种方法可以将应用程序配置部分添加到app.config中,然后使用System.Configuration命名空间中的ConfigurationManager类自动加载它?

任何一个例子?顺便说一句,我在NET20。

修改
对不起,我应该澄清一下。我想加载字典而不使用AppSettings。我知道该怎么做。当然,使用AppSettings的缺点是我必须更改我的代码以向字典中添加新值。这就是为什么我正在寻找一种自动完成的方法。

2 个答案:

答案 0 :(得分:2)

您需要在app.config文件中添加<appSettings>部分。它看起来像:

<appSettings>
    <add key="foo" value="fooValue" />
    <add key="bar" value="barValue" />
    <add key="baz" value="bazValue" />
 </appSettings> 

在您的应用中,您可以使用System.Configuration.ConfigurationManager.AppSettings获取这些值,这是一个NameValueCollection,实际上是从字符串到字符串的字典。

string myFoo = System.Configuration.ConfigurationManager.AppSettings["foo"];

答案 1 :(得分:2)

您可以按照描述的方式使用appSettings部分,但该部分很容易受到各种需求的污染,因此我通常会避免使用它。您可以制作自定义部分来处理此问题。

想象一下,你有一个名为“PluginSpec”的类,你可以编写如下代码:

[ConfigurationCollection(typeof(PluginSpec), AddItemName = "Plugin",
    CollectionType = ConfigurationElementCollectionType.BasicMap)]
public class PluginCollection : ConfigurationElementCollection
{
    //This collection is potentially modified at run-time, so
    //this override prevents a "configuration is read only" exception.
    public override bool IsReadOnly()
    {
        return false;
    }

    protected override ConfigurationElement CreateNewElement()
    {
        return new PluginSpec();
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
        PluginSpec retVal = element as PluginSpec;
        return retVal.Name;
    }

    public PluginSpec this[string name]
    {
        get { return base.BaseGet(name) as PluginSpec; }
    }

    public void Add(PluginSpec plugin){
        this.BaseAdd(plugin);
    }
}

上面的代码可以从另一个配置类的成员中使用,如下所示:

    [ConfigurationProperty("", IsDefaultCollection = true)]
    public PluginCollection Plugins
    {
        get
        {
            PluginCollection subList = base[""] as PluginCollection;
            return subList;
        }
    }

以上将是从ConfigurationElement或ConfigurationSection派生的类中的成员。