zoukankan      html  css  js  c++  java
  • app.config 配置多项 配置集合 自定义配置(2)

    上一篇说了利用app.config自定义节点配置,那是利用工具来实现,其实也一全部编码的方式来实现.
    举一个栗子.
    Simpson一家有父亲James,母亲Kate,和三个儿女Jim,Aaron和Lukas.结构如下.

      <family surname="Simpson">
        <father  firstName="James" lastName="Simpson"/>
        <mother  firstName="Kate" lastName="Simpson"/>
        <children >
          <add firstName="Jim" lastName="Simpson"/>
          <add firstName="Aaron" lastName="Simpson"/>
          <add firstName="Lukas" lastName="Simpson"/>
        </children>
    </family>
    

      加在Config中像下面这个样子.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="family" type="SimpsonFamily.Config.FamilySection,SimpsonFamily"/>
      </configSections>
      <family surname="Simpson">
        <father firstName="James" lastName="Simpson"/>
        <mother firstName="Kate" lastName="Simpson"/>
        <children >
          <add firstName="Jim" lastName="Simpson"/>
          <add firstName="Aaron" lastName="Simpson"/>
          <add firstName="Lukas" lastName="Simpson"/>
        </children>
       
      </family>
    </configuration>

    注意上面代码中的type,"SimpsonFamily.Config.FamilySection"表示这个section的类的路径(命名空间+类名),"SimpsonFamily"其实就是程序集的名字,因为这里要用到反射.
    一般还可以有 "Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"这种,这里我们省略.

    接下来咱们编码:
    在名为SimpsonFamily的工程中建立文件夹config,增加class ,命名 FamilySection,继承自System.Configuration.ConfigurationSection类(需要添加引用).
    这个家庭的姓氏为Simpson,通过XML中的属性来实现的.father和mother通过子节点实现.而孩子们又是集合.应该这样编码.
    1.增加一个新类--儿女的集合Children,继承自ConfigurationElementCollection,实现他的一些集合操作方法;

    class Children : ConfigurationElementCollection
        {
            protected override object GetElementKey(ConfigurationElement element)
            {
                return ((Child)element).FirstName;
            }
    
            protected override ConfigurationElement CreateNewElement()
            {
                return new Child();
            }
    
            public Child this[int i]
            {
                get { return (Child)base.BaseGet(i); }
            }
    
            public Child this[string key]
            {
                get { return (Child)base.BaseGet(key); }
            }
    
        }
    

      

    2.新增类:father,mother,child,有属性firstName和lastName.集成自ConfigurationElement

     class Person : ConfigurationElement
        {
            [ConfigurationProperty("firstName", IsRequired = true, IsKey = true)]
            public string FirstName
            {
                get { return (string)base["firstName"]; }
                set { base["firstName"] = value; }
            }
            [ConfigurationProperty("lastName", IsRequired = true)]
            public string LastName
            {
                get { return (string)base["lastName"]; }
                set { base["lastName"] = value; }
            }
        }
        class Mother : Person { }
        class Father : Person { }
        class Child : Person { }
    

      

    3.新增类SimpsonFamily.Config.FamilySection,增加属性surname,增加father和mother,增加集合children(children中的type明显应为Child).

     class FamilySection : System.Configuration.ConfigurationSection
        {
            [ConfigurationProperty("surname", IsRequired = true)]
            public string Surname
            {
                get { return (string)base["surname"]; }
                set { base["surname"] = value; }
            }
    
            [ConfigurationProperty("father", IsDefaultCollection = false)]
            public Father Father
            {
                get { return (Father)base["father"]; }
                set { base["father"] = value; }
            }
    
            [ConfigurationProperty("mother", IsDefaultCollection = false)]
            public Mother Mother
            {
                get { return (Mother)base["mother"]; }
                set { base["mother"] = value; }
            }
    
    
            [ConfigurationProperty("children", IsDefaultCollection = false)]
            [ConfigurationCollection(typeof(Child), CollectionType = ConfigurationElementCollectionType.AddRemoveClearMap, RemoveItemName = "remove")]
            public Children Children
            {
                get { return (Children)base["children"]; }
                set { base["children"] = value; }
            }
        }
    

      

    测试代码:

    var section = (FamilySection)System.Configuration.ConfigurationManager.GetSection("family");
                string surname = section.Surname;
                Father f = section.Father;
                Mother m = section.Mother;
                for (int i = 0; i < section.Children.Count; i++)
                {
                    string firstname = section.Children[i].FirstName;
                    string lastname = section.Children[i].LastName;
                }
    

      

  • 相关阅读:
    10.用户管理
    9.更新系统时间
    8.标准输入输出重定向
    7.文件压缩与find命令
    6.Linux文件的详细属性
    5.Linux基础命令
    4.Linux目录结构
    3.磁盘光驱挂载
    2.xshell连接
    javascript中的location的用法
  • 原文地址:https://www.cnblogs.com/birds-zhu/p/5919351.html
Copyright © 2011-2022 走看看