第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; }
    }
}
View Code
<?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>
View Code
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:	"+serverGroup.Provider);
            foreach (MailServer config in serverGroup)
            {
                Console.WriteLine("-------------------------------");
                Console.WriteLine("client:	"+config.Client);
                Console.WriteLine("address:	"+config.Address);
                Console.WriteLine("userName:	"+config.UserName);
                Console.WriteLine("password:	"+config.Password);
            }
            Console.ReadKey();
        }
    }
}
View Code
原文地址:https://www.cnblogs.com/liuslayer/p/5944522.html