如何向app.config配置集添加属性?

时间:2012-07-09 18:59:29

标签: c# app-config

我正在尝试在app.config中使用以下部分结构

<MyConfig>
    <NewsFeeds site="abc">
        <add name="first" />
    </NewsFeeds>
    <NewsFeeds site="zyx">
        <add name="another" />
    </NewsFeeds>
</MyConfig>

我已经有MyConfig部分工作,但我不确定应该如何编码NewsFeed集合,或者这个结构是否可行。现在我到目前为止有以下课程:

[ConfigurationCollection(typeof(NewsFeedConfig))]
public class NewsFeedConfigCollection : ConfigurationElementCollection
{
    protected override ConfigurationElement CreateNewElement()
    {
        return new NewsFeedConfig();
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((NewsFeedConfig)(element)).Name;
    }

    public NewsFeedConfig this[int idx] { get { return (NewsFeedConfig)BaseGet(idx); } }
}

public class NewsFeedConfig : ConfigurationElement
{
    [ConfigurationProperty("name", IsKey = true, IsRequired = true)]
    public string Name
    {
        get { return (string)base["name"]; }
        set { base["name"] = value; }
    }

    [ConfigurationProperty("source", IsRequired = true)]
    public string Source
    {
        get { return (string)base["source"]; }
        set { base["source"] = value; }
    }
}

但是,这要求所有新闻Feed都在一个新闻Feed集合下,然后我必须通过向每个元素添加Site属性来手动解析它们。那很好,但是可以用上面定义的XML工作的方式来实现吗?

1 个答案:

答案 0 :(得分:0)

我想你会在这里找到答案:Sections must only appear once per config file! why?

您可能希望将xml重构为更像:

<MyConfig>
  <NewsFeed site="abc">
    <Feeds>
      <Feed name="first" />
    </Feeds>
  </NewsFeed>
  <NewsFeed site="zyx">
    <Feeds>
      <Feed name="second" />
      <Feed name="third" />
      <Feed name="fourth" />
    </Feeds>
  </NewsFeed>
</MyConfig>