代码之家  ›  专栏  ›  技术社区  ›  Seth Spearman

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

  •  2
  • Seth Spearman  · 技术社区  · 14 年前

    我知道我可以使用xml库或linq-to-xml来加载它来解析和遍历它。我的问题是有一个内在的方式来做这件事。

    有没有办法将应用程序配置部分添加到app.config中,然后使用System.configuration命名空间中的ConfigurationManager类自动加载它?

    有什么例子吗?顺便说一句,我在NET20。

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   Matt Greer    14 年前

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

    <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"];
    
        2
  •  2
  •   Brent Arias    14 年前

    假设您有一个名为“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派生的类中的成员。