第13章 .NET应用程序配置

时间:2023-07-02 17:14:19
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();
}
}
}