应用框架的设计与实现——.NET平台(6 源码分析)
2006-12-22 22:42
1086 查看
作者实现方式的特点:
所有自定配置节的读取依靠由接口【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>
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"));
}
}
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;
}
}
所有自定配置节的读取依靠由接口【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>
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"));
}
}
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;
}
}
相关文章推荐
- 应用框架的设计与实现——.NET平台(10 授权服务.源码分析)
- 应用框架的设计与实现——.NET平台(5 缓存服务.源码分析)
- 应用框架的设计与实现——.NET平台(7.事件通知服务.源码分析)
- 应用框架的设计与实现——.NET平台(9 消息队列服务代码分析)
- 应用框架的设计与实现——.NET平台(4.3 SAF代码分析)
- 应用框架的设计与实现——.NET平台(1)
- 应用框架的设计与实现——.NET平台(8.1 Windows服务.线程)
- 应用框架的设计与实现——.NET平台(6.获取外部配置信息)
- 应用框架的设计与实现——.NET平台4.2代码测试问题解决
- 应用框架的设计与实现——.NET平台(8.2 Windows服务)
- 应用框架的设计与实现——.NET平台(9 消息队列产品安装)
- 应用框架的设计与实现——.NET平台(8.3 源码分析)
- Silverlight企业应用快速开发平台框架设计(二)分析-平台实现重点是什么,要怎么做?
- 应用框架的设计与实现——.NET平台(4.2 Remoting 无配置文件)
- 应用框架的设计与实现——.NET平台(2)
- 应用框架的设计与实现——.NET平台(3)
- 应用框架的设计与实现——.NET平台(7.事件通知服务.委托.异步编程)
- 应用框架的设计与实现——.NET平台(8.3 调用非托管代码的方法)
- 应用框架的设计与实现——.NET平台(6 自定配置文件节读取类)
- 应用框架的设计与实现——.NET平台(4)