作者实现方式的特点:
所有自定配置节的读取依靠由接口【IConfigurationSectionHandler】继承来的类SAF.Configuration.ConfigurationHandler;
具体配置节的读取类是什么推迟到配置节内再指定(<Framework type=...),读取类也不需去继承接口【IConfigurationSectionHandler】;
App.Config
Application.Configuration.AppConfigurationManager
SAF.Configuration.ConfigurationHandler
所有自定配置节的读取依靠由接口【IConfigurationSectionHandler】继承来的类SAF.Configuration.ConfigurationHandler;
具体配置节的读取类是什么推迟到配置节内再指定(<Framework type=...),读取类也不需去继承接口【IConfigurationSectionHandler】;
App.Config
<
configuration
>
< configSections >
< section name ="Framework" type ="SAF.Configuration.ConfigurationHandler,SAF.Configuration" />
< section name ="MyApplication" type ="SAF.Configuration.ConfigurationHandler,SAF.Configuration" />
</ configSections >
< Framework type ="SAF.Configuration.ConfigurationManager,SAF.Configuration" >
< SAF .EventNotification >
< Server > localhost </ Server >
< Port > 4000 </ Port >
< ApplicationName > EventNotification </ ApplicationName >
< ObjectUri > EventURI </ ObjectUri >
</ SAF.EventNotification >
</ Framework >
< MyApplication type ="Application.Configuration.AppConfigurationManager,Application.Configuration" >
< Application .Configuration >
< ConfigurationAgent >
< Agent name = "WSAgent1" type ="TestConfigurationAgent.ConfigurationWSAgent,TestConfigurationAgent" >
< Parameters >
< Section > Application.MessageQueue </ Section >
< Environment > QAEnvironment </ Environment >
</ Parameters >
< Url > http://localhost/ConfigurationData/ConfigurationService.asmx </ Url >
</ Agent >
</ ConfigurationAgent >
</ Application.Configuration >
< Application .Database >
< ConnectionString > Persist Security Info=False;User ID=sa;Password=password;Initial Catalog=pubs;Data Source=127.0.0.1 </ ConnectionString >
</ Application.Database >
< Application .MessageQueue ConfigurationAgent ="WSAgent1" >
</ Application.MessageQueue >
</ MyApplication >
</ configuration >
< configSections >
< section name ="Framework" type ="SAF.Configuration.ConfigurationHandler,SAF.Configuration" />
< section name ="MyApplication" type ="SAF.Configuration.ConfigurationHandler,SAF.Configuration" />
</ configSections >
< Framework type ="SAF.Configuration.ConfigurationManager,SAF.Configuration" >
< SAF .EventNotification >
< Server > localhost </ Server >
< Port > 4000 </ Port >
< ApplicationName > EventNotification </ ApplicationName >
< ObjectUri > EventURI </ ObjectUri >
</ SAF.EventNotification >
</ Framework >
< MyApplication type ="Application.Configuration.AppConfigurationManager,Application.Configuration" >
< Application .Configuration >
< ConfigurationAgent >
< Agent name = "WSAgent1" type ="TestConfigurationAgent.ConfigurationWSAgent,TestConfigurationAgent" >
< Parameters >
< Section > Application.MessageQueue </ Section >
< Environment > QAEnvironment </ Environment >
</ Parameters >
< Url > http://localhost/ConfigurationData/ConfigurationService.asmx </ Url >
</ Agent >
</ ConfigurationAgent >
</ Application.Configuration >
< Application .Database >
< ConnectionString > Persist Security Info=False;User ID=sa;Password=password;Initial Catalog=pubs;Data Source=127.0.0.1 </ ConnectionString >
</ Application.Database >
< Application .MessageQueue ConfigurationAgent ="WSAgent1" >
</ Application.MessageQueue >
</ MyApplication >
</ configuration >
Application.Configuration.AppConfigurationManager
/// <summary>
/// A sample configuration system for the business application
/// it shows how you can extend the SAF.Configuraiton with your custom
/// configuration manager and objectsl
/// </summary>
public class AppConfigurationManager
{
public DatabaseConfiguration DatabaseConfig;
public MessageQueueConfiguration MessageQueueConfig;
private XmlNode configurationData;
/// <summary>
/// the constructor start the chain reaction of
/// creating all the configuration object used by the application
/// </summary>
/// <param name="sections">the xml element containing the configuraiton settings</param>
public AppConfigurationManager(XmlNode sections)
{
configurationData = sections;
ConfigurationAgentManager cam = new ConfigurationAgentManager(configurationData);
//create the indivdual configuraiton object and assign them to the public fields
DatabaseConfig = new DatabaseConfiguration(cam.GetData("Application.Database"));
MessageQueueConfig = new MessageQueueConfiguration(cam.GetData("Application.MessageQueue"));
}
}
/// A sample configuration system for the business application
/// it shows how you can extend the SAF.Configuraiton with your custom
/// configuration manager and objectsl
/// </summary>
public class AppConfigurationManager
{
public DatabaseConfiguration DatabaseConfig;
public MessageQueueConfiguration MessageQueueConfig;
private XmlNode configurationData;
/// <summary>
/// the constructor start the chain reaction of
/// creating all the configuration object used by the application
/// </summary>
/// <param name="sections">the xml element containing the configuraiton settings</param>
public AppConfigurationManager(XmlNode sections)
{
configurationData = sections;
ConfigurationAgentManager cam = new ConfigurationAgentManager(configurationData);
//create the indivdual configuraiton object and assign them to the public fields
DatabaseConfig = new DatabaseConfiguration(cam.GetData("Application.Database"));
MessageQueueConfig = new MessageQueueConfiguration(cam.GetData("Application.MessageQueue"));
}
}
SAF.Configuration.ConfigurationHandler
/// <summary>
/// Summary description for Class1.
/// </summary>
public class ConfigurationHandler : System.Configuration.IConfigurationSectionHandler
{
public object Create(Object parent, object configContext, XmlNode section)
{
Type type = System.Type.GetType(section.Attributes["type"].Value);
object[] parameters = {section};
//call the configuration object's constructor
object configObject = null;
try
{
configObject = Activator.CreateInstance(type, parameters);
}
catch (Exception ex)
{
string x = ex.Message;
return null;
}
return configObject;
}
}
/// Summary description for Class1.
/// </summary>
public class ConfigurationHandler : System.Configuration.IConfigurationSectionHandler
{
public object Create(Object parent, object configContext, XmlNode section)
{
Type type = System.Type.GetType(section.Attributes["type"].Value);
object[] parameters = {section};
//call the configuration object's constructor
object configObject = null;
try
{
configObject = Activator.CreateInstance(type, parameters);
}
catch (Exception ex)
{
string x = ex.Message;
return null;
}
return configObject;
}
}