先把Netop.Core的最核心部分“對象查找服務”放一放,先說說應用系統的配置。 一個應用系統的配置是少不了的,除非你是一個純硬代碼族頑固者。 也見過有的應用系統通過系統提供的健值(key-value)方法在appSettings節點下設了幾十個甚至上百個,不堪入目,更別說條理性了。 開發一個應用 ...
先把Netop.Core的最核心部分“對象查找服務”放一放,先說說應用系統的配置。
一個應用系統的配置是少不了的,除非你是一個純硬代碼族頑固者。
也見過有的應用系統通過系統提供的健值(key-value)方法在appSettings節點下設了幾十個甚至上百個,不堪入目,更別說條理性了。
開發一個應用框架,配置一般是少不了,如log4net就有自己的配置,不會讓你在appSettings設幾十個條目。
開發配置是很簡單的,下麵慢慢說來。
在NET應用中,配置信息以XML文檔儲存。WEB應用為Web.config文件,可執行文件為*.exe.config(編譯時由app.config複製並改名)。
在NET中,配置文件的信息經實現System.Configuration.IConfigurationSectionHandler介面的處理器類讀出,其介面只有一個方法:
object Create(Object parent, object configContext, XmlNode section);
在Netop.Core中,實現的配置處理器類是Netop.Core.Configuration.ConfigurationHandler.
實現了配置處理器類,就獲得了此節點的XML信息,再對它進行解析讀出其相關內容即可。在Netop.Core中,ConfigurationHandler把這個工作交給了Netop.Core.Configuration.AppConfigurationManager。
看看實際的配置信息就清楚了:
<configSections>
<section name="Netop.Application" type="Netop.Core.Configuration.ConfigurationHandler,Netop.Core" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
這裡可以看出,log4net的配置處理器類是log4net.Config.Log4NetConfigurationSectionHandler
Netop.Core的配置處理器類是Netop.Core.Configuration.ConfigurationHandler,節點名為Netop.Application,再看Netop.Application段:
<Netop.Application type="Netop.Core.Configuration.AppConfigurationManager,Netop.Core">
<Application.ObjectLocator>
<DefaultAppObjectLocatorService>Netop.Core.LocatorService.DefaultAppObjectLocatorService,Netop.Core</DefaultAppObjectLocatorService>
<ObjectServiceAgentName>AppObjectService</ObjectServiceAgentName>
<AspectAgentName>AppAspect</AspectAgentName>
</Application.ObjectLocator>
<Application.Log>
<LogCategory>Netop.Core.Log.Log4Net,Netop.Core</LogCategory>
<LogParameter>Log</LogParameter>
</Application.Log>
<Application.Agent>
<Agent name = "AppObjectService" type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">
<File>Service.xml</File>
</Agent>
<Agent name = "AppAspect" type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">
<File>Aspect.xml</File>
</Agent>
<Agent name = "AppEntity" type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">
<File>Entity.xml</File>
</Agent>
</Application.Agent>
</Netop.Application>
<Netop.Application type="Netop.Core.Configuration.AppConfigurationManager,Netop.Core">中type的值即是AppConfigurationManager。
在Netop.Core中,有一個類Netop.Core.Configuration.SettingConfiguration實現讀取類似“<LogCategory>Netop.Core.Log.Log4Net,Netop.Core</LogCategory>”這樣的信息。
對於SettingConfiguration,Netop.Core有個預設的節點:
<Netop.Application type="Netop.Core.Configuration.AppConfigurationManager,Netop.Core">
……
<Application.Settings>
……
</Application.Settings>
</Netop.Application>
如在Application.Settings加項目如:<Host>smtp.sohu.com</Host>
使用則為:Netop.Core.Configuration.AppConfiguration.Current.ApplicationSettingsConfig.GetKeyValue("Host")而得到值smtp.sohu.com .
也可以自己加一Section如:
<Application.SmtpServer>
<Host>smtp.sohu.com</Host>
<RequriedAuthenticate>true</RequriedAuthenticate>
……
</Application.SmtpServer>
使用則為:Netop.Core.Configuration.AppConfiguration.Current.GetAppSettingConfiguration("Application.SmtpServer").GetKeyValue("Host")而得到值smtp.sohu.com
.
在Netop.Core中,還有一種代理配置,代理配置類只要實現Netop.Core.Configuration.IConfigurationAgent介面就可挺拔式使用。IConfigurationAgent如下:
public interface IConfigurationAgent
{
void Initialize(XmlNode xml);
AgentConfigurationInfo GetConfigurationInfo();
}
Netop.Core已經實現一個XML文件代理配置類:Netop.Core.Configuration.FileAgentConfiguration 。
對於配置信息:
<Netop.Application type="Netop.Core.Configuration.AppConfigurationManager,Netop.Core">
<Application.ObjectLocator>
<DefaultAppObjectLocatorService>Netop.Core.LocatorService.DefaultAppObjectLocatorService,Netop.Core</DefaultAppObjectLocatorService>
<ObjectServiceAgentName>AppObjectService</ObjectServiceAgentName>
<AspectAgentName>AppAspect</AspectAgentName>
</Application.ObjectLocator>
<Application.Log>
<LogCategory>Netop.Core.Log.Log4Net,Netop.Core</LogCategory>
<LogParameter>Log</LogParameter>
</Application.Log>
<Application.Agent>
<Agent name = "AppObjectService" type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">
<File>Service.xml</File>
</Agent>
<Agent name = "AppAspect" type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">
<File>Aspect.xml</File>
</Agent>
<Agent name = "AppEntity" type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">
<File>Entity.xml</File>
</Agent>
</Application.Agent>
</Netop.Application>
<Application.Agent>節點內的就是代理配置信息:
<Agent name = "AppObjectService" type="Netop.Core.Configuration.FileAgentConfiguration,Netop.Core">
<File>Service.xml</File>
</Agent>
name為代理配置名,type為代理配置類,File為文件路徑。
程式使用為:
object p = null;
AppConfiguration.Current.GetAgentData("AppObjectService", out p);//返回Service.xml文件的XML信息
當然代理配置名AppObjectService是跟<ObjectServiceAgentName>AppObjectService</ObjectServiceAgentName>聯繫的,感興趣的可以看ObjectServiceConfigurationManager的內容。
對於開發者要自己在Netop.Application加節點(不屬於上面所說的類型),怎麼辦呢?
AppConfigurationManager有一方法:XmlNode GetData(string key) ,調用後自己解析XML信息即可(調用AppConfiguration.Current.GetData("節點名")返回XmlNode)。
這是Netop.Core的配置服務。
當然還可以直接使用NET系統的配置處理器類來處理配置信息,如:
System.Configuration.NameValueSectionHandler <!--以NameValue鍵值/對的形式返回配置節中的信息-->
System.Configuration.DictionarySectionHandler <!--以Dictionary字典鍵值對的形式返回配置節中的信息-->
System.Configuration.SingleTagSectionHandler <!--基礎結構。處理 .config 文件中由單個 XML 標記所表示的各配置節。-->
輕量級的.NET對象查找服務和AOP開發框架源碼Netop.Core3.5下載地址:http://download.csdn.NET/detail/tom_cat_xie_jxdy/9837303
輕量級的.NET對象查找服務和AOP開發框架測試源碼 下載地址:http://download.csdn.Net/detail/tom_cat_xie_jxdy/9837278
Netop.Core--輕量級的.NET對象查找服務和AOP開發框架文檔下載地址:http://download.csdn.net/detail/tom_cat_xie_jxdy/9838212