应用框架的设计与实现——.NET平台(6 源码分析)

作者实现方式的特点:
所有自定配置节的读取依靠由接口【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;
        
        }

    }

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值