第13章 .NET应用程序配置

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Configuration;
using System.Xml;

namespace CustomConfig
{
    public class MailServerConfigHandler:IConfigurationSectionHandler
    {
        public object Create(object parent, object configContext, System.Xml.XmlNode section)
        {
            MailServerConfig config = new MailServerConfig();
            config.Provider = section.Attributes["provider"] == null ? "" : section.Attributes["provider"].Value;
            foreach (XmlNode child in section.ChildNodes)
            {
                MailServer server = new MailServer();
                server.Client = child.Attributes["client"] == null ? "" : child.Attributes["client"].Value;
                foreach (XmlNode grandChild in child.ChildNodes)
                {
                    server.ServerNode.Add(grandChild.Name, grandChild.InnerText);
                }
                config.Add(server);
            }
            return config;
        }
    }

    public class MailServer
    {
        private Hashtable serverNode;
        public MailServer()
        {
            serverNode = new Hashtable();
        }

        public Hashtable ServerNode
        {
            get { return serverNode; }
        }

        public string Client { get; set; }

        public string Address
        {
            get { return serverNode["address"] as string; }
        }

        public string UserName
        {
            get { return serverNode["username"] as string; }
        }

        public string Password
        {
            get { return serverNode["password"] as string; }
        }
    }

    public class MailServerConfig : List<MailServer>
    {
        public string Provider { get; set; }
    }
}

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="mailServerGroup" type="CustomConfig.MailServerConfigHandler,CustomConfig"/>
  </configSections>

  <mailServerGroup provider="www.edong.com">
    <mailServer client="forum.tracefact.net">
      <address>addr1</address>
      <userName>user1</userName>
      <password>pwd1</password>
    </mailServer>

    <mailServer client="blog.tracefact.com">
      <address>addr2</address>
      <userName>user2</userName>
      <password>pwd2</password>
    </mailServer>
  </mailServerGroup>
</configuration>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CustomConfig;
using System.Configuration;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            example();
        }

        private static void example()
        {
            MailServerConfig serverGroup = (MailServerConfig)ConfigurationManager.GetSection("mailServerGroup");
            Console.WriteLine("provider:\t"+serverGroup.Provider);
            foreach (MailServer config in serverGroup)
            {
                Console.WriteLine("-------------------------------");
                Console.WriteLine("client:\t"+config.Client);
                Console.WriteLine("address:\t"+config.Address);
                Console.WriteLine("userName:\t"+config.UserName);
                Console.WriteLine("password:\t"+config.Password);
            }
            Console.ReadKey();
        }
    }
}

时间: 2024-10-26 01:31:56

第13章 .NET应用程序配置的相关文章

sql server 2000安装程序配置服务器失败

第一种方法 今天安装SQL Server 2000遇到了个很BT的问题,提示出下: 安装程序配置服务器失败.参考服务器错误日志和C:\Windows\sqlstp.log了解更多信息. 以前进安装目录删除已安装的目录就解决了,可这次重启了五遍还是这样(我还真有耐心 -_-;) 去百度一下,在一个博客的评论里找到了解决办法. 第一步:去掉"以前的某个程序安装已在安装计算机上创建挂起的文件操作"的提示(否则你需要重启机器的) 打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYS

敏捷软件开发:原则、模式与实践——第13章 写给C#程序员的UML概述

第13章 写给C#程序员的UML概述 UML包含3类主要的图示.静态图(static diagram)描述了类.对象.数据结构以及它们之间的关系,藉此表现出了软件元素间那些不变的逻辑结构.动态图(dynamic diagram)展示了软件实体在运行过程中是如何变化的,其中描述了运行流程或者实体改变状态的方式.物理图(physical diagram)展示了软件实体不变的物理结构,其中描述了诸如源文件.库.二进制文件.数据文件等物理实体以及它们之间的关系. 查看如下代码,这段程序实现了一个基于简单

《Cortex?-A系列编程者指南(V3.0)》第13章&lt;中断处理&gt;笔记

在本章,我们会看看ARM处理器处理中断的一系列方法,简单地看看通用中断控制器(Generic Interrupt Controller,GIC)架构. 旧版本的ARM架构允许实现者在他们的外部中断控制器设计中相当大的自由,没有关于中断类型或数量,或者是被用于中断控制模块接口的软件模型的协议.GIC架构提供一个更为严格的控制规范,使得来自不同制造商之间的中断控制器之间有更高程度的一致性.这使得中断处理代码变得更加可移植. 13.1 外部中断请求 如我们在第12章的异常类型中讨论的,所有的ARM处理

MySQL性能调优与架构设计——第13章 可扩展性设计之 MySQL Replication

第13章 可扩展性设计之 MySQL Replication 前言: MySQL Replication 是 MySQL 非常有特色的一个功能,他能够将一个 MySQL Server 的 Instance 中的数据完整的复制到另外一个 MySQL Server 的 Instance 中.虽然复制过程并不是实时而是异步进行的,但是由于其高效的性能设计,延时非常之少.MySQL 的Replication 功能在实际应用场景中被非常广泛的用于保证系统数据的安全性和系统可扩展设计中.本章将专门针对如何利

第 13 章

13.1 [出题思路] 理解拷贝构造函数的基本概念. [解答] 如果构造函数的第一个参数是自身类类型的引用,且所有其他参数(如果有的话)都有默认值,则此构造函数是拷贝构造函数.拷贝构造函数在以下几种情况下会被使用: 拷贝初始化(用 = 定义变量). 将一个对象作为实参传递给非引用类型的形参. 一个返回类型为非引用类型的函数返回一个对象. 用花括号列表初始化一个数组中的元素或一个聚合类中的成员. 初始化标准库容器或调用其 insert/push 操作时,容器会对其元素进行拷贝初始化. 13.2 [

JavaScript权威指南第13章 web浏览器中的javascript

13.1 客户端javascript window对象是所有的客户端javascript特性和api的主要接入点.表示浏览器的一个窗口,可以通过window对象来引用它. window 的方法 alert() prompt() confirm() 13.2 在html里嵌入javascript 4种方法: 内联:放置在<script></script>标签之中 外部引入:<script src="   "></script> html程序

阅读《实例化需求》1-3章有感

今天我阅读了<实例化需求>的1-3章. 第一章主要是讲实例化需求的好处.实例化需求说明是一组过程模式,他帮助团队构建正确的产品. 使用实例化需求说明,团队编写的文档恰到好处,在短迭代或基于流的开发中可以有效地协助变更. <实例化需求>这本书不是以理论的方式来构建一个案例来阐述实例化需求说明的好处,而是来自 于那些来自于那些大大受益于实例化需求说明的团队. 实例化需求可以更有效地实施变更,主要是通过活文档.活文档是系统功能的一个信息源,与程序 代码一样可靠,但更容易使用和理解.他帮助

第 13 章 装饰模式【Decorator Pattern】

以下内容出自:<<24种设计模式介绍与6大设计原则>> Ladies and gentlemen,May I get your attention,Please?,Now I’m going to talk about decoratorpattern.装饰模式在中国使用的那实在是多,中国的文化是中庸文化,说话或做事情都不能太直接,需要有技巧的,比如说话吧,你要批评一个人,你不能一上来就说你这个做的不对,那个做的不对,你要先肯定他的成绩,表扬一下优点,然后再指出瑕疵,指出错误的地方

ORA-12541:TNS:无监听程序 配置Oracle Myeclipse无法连接上 花费一天时间解决掉的

背景:自己机子做oracle服务器,其他机子可以ping得通我的机子,但是jdbc就是连不上,后来用plsql连出现无监听程序.... 我昨天重新安装Oracle后,用PL/SQL Developer连接oracle时出现ORA-12541:TNS:无监听程序的错误,如下图: 在王鹏师兄的帮助下,发现原来是oracle的监听没有启动,重启监听后就连接成功了,下面跟大家分享一下如何启动oracle的监听. 1.打开Net Configuration Assistant 2.选择监听程序配置,下一步