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个小时.

时间: 2024-11-08 18:17:18

app.config 配置多项 配置集合 自定义配置(3)的相关文章

app.config 配置多项 配置集合 自定义配置

C#程序的配置文件,使用的最多的是appSettings 下的<add key="Interval" value="30"/>,这种配置单项的很方便,但是配置集合就不方便了(当然你可以用逗号分隔,key=key1,key2,key3……但是你还是不知道有多少个集合).现在给出解决方案. 需求:程序超级管理员采用这种设置方式,在app.config中配置的方式,可以配置多个.登陆成功后,读取config,看我是不是超级管理员.(当然,这个需求是很扯淡的,因

app.config 配置多项 配置集合 自定义配置(4) 自动增加配置项到配置文件

配置文件如下图(最后的图片). 自动写入configSections和configSections的实例 1.自动写入configSections Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); LasteventSettingSection last = new LasteventSettingSection(); config.Sections.Add

C# App.config 详解

读语句: String str = ConfigurationManager.AppSettings["DemoKey"]; 写语句: Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); cfa.AppSettings.Settings["DemoKey"].Value = "DemoValue"; cfa.Save

【引用】C#读写app.config中的数据

读语句:          String str = ConfigurationManager.AppSettings["DemoKey"]; 写语句: Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);           cfa.AppSettings.Settings["DemoKey"].Value = "DemoVa

【C#】#103 动态修改App.config配置文件

对 C/S模式 下的 App.config 配置文件的AppSetting节点,支持配置信息现改现用,并可以持久保存. 一. 先了解一下如何获取 配置信息里面的内容[获取配置信息推荐使用这个] 1.1 获取方法一:获取之前需要引用命名空间: using System.Configuration; ConfigurationManager.AppSettings["key"] 1.2 获取方法二:使用XML类,直接 Load 配置文件,然后读取 AppSetting节点下的信息[不推荐使

App.config和Web.config配置文件的自定义配置节点

前言 昨天修改代码发现了一个问题,由于自己要在WCF服务接口中添加了一个方法,那么在相应调用的地方进行更新服务就可以了,不料意外发生了,竟然无法更新.左查右查终于发现了问题.App.config配置文件中的配置貌似出现了问题.查找节点发现是如下节点: <configSections> <section name="Test1" type="Demo.Section1,Demo"/> .............. </configSect

创建自定义配置节点(web.config和app.config都适用)

无论是web程序.windows程序.windows service程序,配置文件都是少不了的.我们都习惯了将连接字符串放在ConnectionString节点中,将程序的设置放在appSetting节点中.配置文件的管理程序为我们提供了方便的管理方式,那么,我们如何自定义配置节点呢? 有两种方法,其一,继承IConfigurationSectionHandler,通过实现Create方法.这种方法的灵活度非常大,我们需要动手解析自定义节点的XmlNode,所以,实现起来也比较复杂.其二,继承C

在Web.config或App.config中的添加自定义配置

.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持.最近看到一些项目中还在自定义xml文件做程序的配置,所以忍不住写一篇用系统自定义配置的随笔了. 如果你已经对自定义配置了如指掌,请忽略这篇文章.? 言归正传,我们先来看一个最简单的自定义配置 <?xml version="1.0" encoding="utf-8" ?> <configuration>

在Web.config或App.config中的添加自定义配置 &lt;转&gt;

.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持.最近看到一些项目中还在自定义xml文件做程序的配置,所以忍不住写一篇用系统自定义配置的随笔了. 如果你已经对自定义配置了如指掌,请忽略这篇文章.? 言归正传,我们先来看一个最简单的自定义配置 <?xml version="1.0" encoding="utf-8" ?> <configuration>