在.net应用中,配置信息以XML文档的形式来存储。依.net的惯例,web.config为Asp.net应用(包括Web Service应用)提供配置信息;而*.exe.config为可执行的应用(包括控制台、Windows服务、Windows桌面应用程序)提供配置信息,其中的“*”代表易用的程序集名称,例如App.exe程序集的对应配置文件为App.exe.config。

1、使用默认方法读取
    
    在代码中使用System.Configuration名称空间中的ConfigurationManager即可方便地对配置进行读取(1.1版使用ConfigurationSettings),比如,用如下代码就可以读取一条配置信息:

string portNumber = ConfigurationManager.AppSettings["PortNumber"];

这段代码读取配置文件AppSetting段中的如下信息:

<appSettings>
    <add key="PortNumber" value="4532"/>
</appSettings>

确实够简单,但是如果我的配置信息更为复杂呢,比如说分为如下的层次:

<Servers>
    <DbServer>
        <Address>10.1.1.1</Address>
        <PortNumber>9797</PortNumber>
    </DbServer>
    <AppServer>
        <Address>10.1.1.2</Address>
        <PortNumber>5203</PortNumber>
    </AppServer>
</Servers>

那边某君回答:“这照样可以一字排开啊”--那么层次更加复杂的呢?嘿嘿,没招了吧。当然有招,我们可以建立强类型的读取类来处理,任你多么复杂也不在话下,哼哼。

2、使用强类型来读取
    
    在.net中,配置文件中的所有信息都经由IconfigurationSectionHandler接口读出。该接口只有一个方法:

object Create (object parent, object configContext, XmlNode section)

通过这个方法,IconfigurationSectionHandler接口读取信息并把它们转换成程序易于使用的形式。
    首先让我们来看一个简单的配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="DbServer" type=""/>
        <section name="AppServer" type=""/>
    </configSections>
<!--上面是段处理器部分-->
<!--下面是段内容部分-->
    <appSettings>
        <add key="PortNumber" value="4532"/>
    </appSettings>
    <DbServer>
          <Address>10.1.1.1</Address>
          <PortNumber>9797</PortNumber>
    </DbServer>
    <AppServer>
          <Addr>10.1.1.2</Addr>
          <Port>5203</Port>
    </AppServer>
</configuration>

如上面所示,除根节点(<configuration>)外,配置数据分为两部分:段处理器(section handler,指节点<configSections>中的所有内容)部分和段内容(section,除<configSections>节点外的内容)部分。
    段处理器部分为给段的内容制定相应的数据处理类,即在<section>节点中,type属性描述的类(前面为包括名称空间的类名,后面为程序集名,使用逗号分隔)被指定用于处理name属性描述的段内容。
    那么,段处理器如何处理相应段的内容呢?原来,<configSections>定义的每一个处理器类都必须实现IconfigurationSectionHandler接口,当执行下列代码时,CLR将通过两个步骤获得一个处理器:

object DbServerConfig = ConfigurationManager.GetSection("DbServer");

首先,CLR在配置文件的段处理器部分找到与“DbServer”相应的段处理器描述,并通过反射机制创建一个处理器对象;然后调用处理器对象的Create方法并传入3个参数,其中第3个参数包含了该段内容的XML信息(在我们的例子中就是DbServer节点下的所有内容),然后返回Create的返回值。
    那我们这就是建立一个简单的段处理器类吧

using System;
using System.Configuration;
using System.Xml;

namespace SimpleConfig
{
    public class DbServerConfig : IConfigurationSectionHandler
    {
        private string address;
        public string Address
        {
            get { return address; }
        }

        private int portNumber;
        public int PortNumber
        {
            get { return portNumber; }
        }

        public object Create(object parent, object configContext, XmlNode section)
        {
            foreach (XmlNode node in section.ChildNodes)
            {
                switch (node.Name)
                {
                    case "Address": address = node.InnerText; break;
                    case "PortNumber": portNumber = Convert.ToInt32(node.InnerText); break;
                }
            }
            return this;
        }
    }
}

接着,把段处理器部分的

<section name="DbServer" type=""/>

改为

<section name="DbServer" type="SimpleConfig.DbServerConfig, SimpleConfig"/>

就可以使用下面的语句来读取配置文件中的内容了:

object o = ConfigurationManager.GetSection("DbServer");
DbServerConfig dbServerConfig = (DbServerConfig)o;
textBox1.Text = dbServerConfig.Address;
textBox2.Text = dbServerConfig.PortNumber.ToString();
本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2005/11/27/285580.html,如需转载请自行联系原作者

在.net中使用强类型来读取配置信息相关推荐

  1. JavaWEB中读取配置信息

    第一种方法是使用java.io和java.util包,缺点是路径的概念要清晰, 例子: Properties prop = new Properties(); InputStream in = get ...

  2. ASP.NET Core的配置(1):读取配置信息

    提到"配置"二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化 ...

  3. 使用Apache Commons Configuration读取配置信息

    2019独角兽企业重金招聘Python工程师标准>>> 在项目中使用一些比较新的库总会给你带来很多快乐,在这篇文章中,我将会给你介绍一个在Java中读取配置文件的框架--Apache ...

  4. php+读取配置里的值,ThinkPHP 读取配置信息与动态配置(C方法)

    ThinkPHP C 方法 C 方法是 ThinkPHP 内置的特殊方法,用于在操作和模板里读取配置文件里的配置信息或者动态配置参数.语法如下: C( para_name, value ) 参数说明 ...

  5. java getenv_Java利用System.getenv()和System.getProperty()来读取配置信息

    System.getenv()和System.getProperty()是Java种常用的两种读取环境配置信息的方法,它们都是java.lang.System类的方法,用途有相似之处,但我们在实际使用 ...

  6. springboot 入门二- 读取配置信息一

    在上篇入门中简单介绍下springboot启动使用了大量的默认配置,在实际开发过程中,经常需要启动多个服务,那端口如何手动修改呢? 此篇就是简单介绍相关的配置文件信息. Spring Boot允许外部 ...

  7. Android平台Chromium net中的代理配置信息获取

    在计算机网络中,代理服务器 扮演着发起请求的客户端与服务器之间的中间人的角色.客户端连接到代理服务器,请求一些服务,比如文件,网页,或其它可以从服务器获得的资源,代理服务器以简化和控制复杂度的形式获取 ...

  8. .Net Core 自定义配置源从配置中心读取配置

    配置,几乎所有的应用程序都离不开它..Net Framework时代我们使用App.config.Web.config,到了.Net Core的时代我们使用appsettings.json,这些我们再 ...

  9. SpringCloud Alibaba - Nacos 作为配置中心 读取Properties配置信息

    SpringCloud Alibaba是阿里巴巴致力于对微服务的管理.配置.注册等一整套的解决方案. 简介 Nacos 提供用于存储配置和其他元数据的 K-V 存储,为分布式系统中的外部化配置提供服务 ...

最新文章

  1. pycharm工程中的pip用不了怎么办?
  2. 实战SSM_O2O商铺_36【商品】商品列表之Dao+Service+Controller层的实现
  3. 国际域名也将列入监管范畴(本文转载自【易名中国】)
  4. Swintransformer详细设计文档
  5. 【python】入门指南:控制语句
  6. java 判断int类型为空
  7. 都快2022年了GraphQL还值得学吗?
  8. ubuntu服务器网站备份,用 Ubuntu 建立 Time Machine 备份服务器
  9. win10中配置Java完整教程
  10. 书单丨5本经典著作描绘C++学习路线图
  11. 学习git: 忽略某些文件(夹)的跟踪
  12. mysql 表单插入数据_PHP表单数据写入MySQL数据库的代码
  13. 一文讲懂什么是vlan、三层交换机、网关、DNS、子网掩码、MAC地址
  14. 计算机桌面常用图标,电脑常用软件图标 常用的电脑软件图标
  15. vue富文本编辑器组件
  16. C# 实现登录并跳转界面
  17. 电视盒子做文件共享服务器,【当贝市场】智能电视盒子和PC电脑文件共享教程...
  18. 关于关于_WIN32_WINNT的说明
  19. Sieve of Eratosthenes(埃拉托色尼筛选法)——C++实现
  20. 苏宁易购不易购,遭遇临时涨价、一月未送货

热门文章

  1. 腻害了!同事写了个隐藏 Bug,我排查了 3 天才解决问题!
  2. 第5章 用户身份与文件权限
  3. Linux / CentOs 7搭建DHCP服务
  4. Linux virtualenv, virtualenvwrapper, pip freeze
  5. mac下开启docker API远程调用
  6. window for jdk install
  7. 区块链的爆炸式增长使其成为第二大热门需求技能
  8. Schema中elementFormDefault=qualified所起的作用
  9. Servlet3.0之二:异步特性
  10. 用Node.js 写web框架(番外)