您的位置:首页 > 其它

应用框架的设计与实现——.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;




}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: