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

    再说说利用app.config配置多个自定义的方法.
    先看这个例子:美国家庭Simpson的家里有父亲母亲和三个儿女,而中国的老王只有独生子女.结构如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <sectionGroup type="Family.SectionGroups,Family" name="family">
          <section name="simpson" type="Family.Simpson.FamilySection,Family" allowDefinition="Everywhere"/>
          <section name="wang" type="Family.Wang.WangSection,Family" allowDefinition="Everywhere"/>
        </sectionGroup>
      </configSections>
    
      <family>
      <simpson 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>
      </simpson>
        
      <wang surname="King">
        <father  firstName="王" lastName="二小"/>
        <mother firstName="李" lastName="菲菲"/>
        <child firstName="王" lastName="博"/>
      </wang>
        
      </family>
      
    </configuration>
    

      

    各个Section和ConfigurationElementCollection的实现参见上一篇文章.此处不贴.
    注意老王美国家庭区别是:老王家由于只有child,所以没有children,只有一个child属性.

    增加一个SectionGroups类,继承自System.Configuration.ConfigurationSectionGroup.

    这个SectionGroups类和配置文件中,下面这句话

    <sectionGroup type="Family.SectionGroups,Family" name="family">
    这句话是对应的,
    "Family.SectionGroups"命名空间+类名,Family为程序集;name="fanmily"为配置节点的名称.

    
    
    
    
    class SectionGroups : System.Configuration.ConfigurationSectionGroup
        {
    
            public Family.Wang.WangSection Wang
            {
                get { return (Family.Wang.WangSection)base.Sections["wang"]; }
            }
    
            public Family.Simpson.FamilySection Simpson
            {
                get { return (Family.Simpson.FamilySection)base.Sections["simpson"]; }
            }
        }
    

      测试代码1

    SectionGroups sample = (SectionGroups)System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None).SectionGroups["family"];
                Family.Wang.WangSection w = sample.Wang;
                Father f= w.Father;
                Mother m = w.Mother;
                Child c = w.Child;
    
                Family.Simpson.FamilySection s = sample.Simpson;
                // do  to for s.Father; s.Mother;s.Children
    

      测试代码2,也可以这样使用:

    Family.Wang.WangSection w = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).GetSection("family/wang") as Family.Wang.WangSection;
    

      测试代码3,这样也行

     System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    
                ConfigurationSectionGroupCollection sectionGroups = config.SectionGroups;
                foreach (ConfigurationSectionGroup sectionGroup in sectionGroups)
                {
                    foreach (ConfigurationSection section in sectionGroup.Sections)//有很多其他默认节点
                    {
                        if (section.SectionInformation.Name == "wang")
                        {
                            Family.Wang.WangSection wang = section as Family.Wang.WangSection;
                            Console.WriteLine("father: " + wang.Father.FirstName + " " + wang.Father.LastName);
                            Console.WriteLine("mother: " + wang.Mother.FirstName + " " + wang.Mother.LastName);
                        }
                        if (section.SectionInformation.Name == "simpson")
                        {
                            Family.Simpson.FamilySection simpson = section as Family.Simpson.FamilySection;
                            Console.WriteLine("father: " + simpson.Father.FirstName + " " + simpson.Father.LastName);
                            Console.WriteLine("mother: " + simpson.Mother.FirstName + " " + simpson.Mother.LastName);
                            foreach (Family.Simpson. Child child in simpson.Children)
                            {
                                Console.WriteLine("child: " + child.FirstName + " " + child.LastName);
                            }
                        }
                    }
                }
    

      

    注意:在最上面的app.config文件中,我开始忘记了<family></family>标签,导致读出来的数据始终为空的,白白浪费我2个小时.

  • 相关阅读:
    浅谈iOS7 AVFoundation 二维码扫描
    使用ZBarSDK生成和读取二维码
    NSURLConnection与NSURLSession大比拼
    iOS开发------之runtime的运用-类与对象&&&获取当前网络状态
    XML之解析------使用NSXMLPaser(SAX)和GDataXML(DOM)
    Beta阶段项目总结
    星光小组第二阶段团队绩效
    第二阶段冲刺第十天
    第二阶段冲刺第九天
    第二阶段冲刺第八天
  • 原文地址:https://www.cnblogs.com/birds-zhu/p/5920487.html
Copyright © 2011-2022 走看看