自定义app.config配置节处理程序

31

如果我使用了这样的app.config,从一个继承自System.Configuration.Section的类中获取“pages”列表的正确方法是什么?

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <configSections>
    <section name="XrbSettings" type="Xrb.UI.XrbSettings,Xrb.UI" />
  </configSections>

  <XrbSettings>
    <pages>
      <add title="Google" url="http://www.google.com" />
      <add title="Yahoo" url="http://www.yahoo.com" />
    </pages>
  </XrbSettings>

</configuration>

你也应该去CodeProject上查看Jon Rista的三篇关于.NET 2.0配置的系列文章。-解开.NET 2.0配置之谜-解码.NET 2.0配置之谜-破解.NET 2.0配置之谜强烈推荐,文笔优美且非常有帮助! - marc_s
此外,如果您发现自己经常创建配置部分,可以使用Configuration Section Designer。这是一个图形化的领域特定语言设计工具,用于设计配置部分。 - John Saunders
1个回答

31

首先在继承“Section”类的类中添加一个属性:

[ConfigurationProperty("pages", IsDefaultCollection = false)]
[ConfigurationCollection(typeof(PageCollection), AddItemName = "add")]
public PageCollection Pages {
    get {
        return (PageCollection) this["pages"];
    }
}
然后,您需要创建一个PageCollection类。我看到的所有示例都几乎相同,所以只需复制此代码,并将“NamedService”重命名为“Page”。
最后,添加一个扩展ObjectConfigurationElement的类。
public class PageElement : ObjectConfigurationElement {
    [ConfigurationProperty("title", IsRequired = true)]
    public string Title {
        get {
            return (string) this["title"];
        }
        set {
            this["title"] = value;
        }
    }

    [ConfigurationProperty("url", IsRequired = true)]
    public string Url {
        get {
            return (string) this["url"];
        }
        set {
            this["url"] = value;
        }
    }
}

这里是一个示例实现中的一些文件:


链接随着时间的推移已经失效。 - Hoppe
@Hoppe 如果你需要另一个示例实现,我在这里制作了一个:https://dev59.com/NnI-5IYBdhLWcg3wlpeW#33544322 - Squazz

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