解决在Web.config或App.config中添加自定义配置的方法(3)


[ConfigurationProperty("children", IsDefaultCollection = false)]
    [ConfigurationCollection(typeof(ChildSection), CollectionType = ConfigurationElementCollectionType.AddRemoveClearMap, RemoveItemName = "remove")]
    public Children Children
    {
        get
        {
            return (Children)base["children"];
        }
        set
        {
            base["children"] = value;
        }
}


我们会经常用到类似appSettings配置节的键值对的构造,这时候我们就不必再自己实现了,我们可以直接使用现有的System.Configuration.NameValueConfigurationCollection类来定义一个自定义的键值对。可以在Complex类中定义如下属性

复制代码 代码如下:


[ConfigurationProperty("NVs", IsDefaultCollection = false)]
    public System.Configuration.NameValueConfigurationCollection NVs
    {
        get
        {
            return (NameValueConfigurationCollection)base["NVs"];
        }
        set
        {
            base["NVs"] = value;
        }
}


然后在配置文件的complex节中添加键值对配置

复制代码 代码如下:


<NVs>
    <add value="123"/>
    <add value="12d3"/>
</NVs>


到这儿已经基本上可以满足所有的配置需求了。不过还有一点更大但是不复杂的概念,就是sectionGroup。我们可以自定义SectionGroup,然后在sectionGroup中配置多个section;分组对于大的应用程序是很有意义的。
如下配置,配置了一个包含simple和一个complex两个section的sectionGroup

复制代码 代码如下:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup type="ConfigExample.Configuration.SampleSectionGroup,ConfigExample">
      <section type="ConfigExample.Configuration.SimpleSection,ConfigExample" allowDefinition="Everywhere" />
      <section type="ConfigExample.Configuration.ComplexSection,ConfigExample" allowDefinition="Everywhere"/>
    </sectionGroup>
  </configSections>
  <sampleGroup>
    <simple maxValue="20" minValue="1">
    </simple>

    <complex>
      <child firstName="James" lastName="Bond"/>
      <children>
        <add firstName="Zhao" lastName="yukai"/>
        <add firstName="Lee" lastName="yukai"/>
        <remove firstName="Zhao"/>
      </children>
  <NVs>
    <add value="123"/>
    <add value="12d3"/>
  </NVs>
    </complex>
  </sampleGroup>
</configuration>


为了方便的存取sectionGroup中的section我们可以实现一个继承自System.Configuration.ConfigurationSectionGroup类的自定义类。实现很简单,就是通过基类的Sections[“sectionName”]索引器返回Section。如下:

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjgxgd.html