- ·上一篇文章:ASP.NET中Cookie编程的基础知识(1)
- ·下一篇文章:Duwamish深入剖析-结构篇
Duwamish深入剖析-配置篇
access" value=" " />
<add key="secure" value=" " />
<add key="docs\common" value=" " />
<add key="docs\dataaccess" value=" " />
<add key="docs\facade" value=" " />
<add key="docs\rules" value=" " />
<add key="docs\web" value=" " />
</SourceViewer>
配置节信息分为两个主区域:配置节处理程序声明区域和配置节设置区域,这里就是刚才定义的三个section的配置节设置区域,它包含实际的配置设置,其用途说明请参见注释,所有配置信息都必须驻留在 <configuration> 和 </configuration> 根 XML 标记之间,配置节设置区域位于 <configSections> 区域之后。
--------------------------------------------------------------------------------
配置节处理程序
前面已经介绍了,section里定义了处理配置节的类:Duwamish7.SystemFramework.ApplicationConfiguration和Duwamish7.Common.DuwamishConfiguration,他们分别位于SystemFramework和Common项目中,.net规定,所有能够处理配置节的类必须要实现IConfigurationSectionHandler接口,而IConfigurationSectionHandler接口很简单,只有一个object Create(object parent,object configContext,XmlNode section)方法,这个方法不需要主动调用,它是在ConfigurationSettings.GetConfig这个静态方法的时候自动调用的,也就是说,当你在程序中使用ConfigurationSettings.GetConfig来获取配置节的时候,.net会根据改配置节声明中所定义的类名和路径自动实例化配置节处理类,并调用Create方法。下面是Duwamish的处理类调用流程:
1、在global.asax的Application_OnStart方法里面调用ApplicationConfiguration.OnApplicationStart静态方法,并获得应用程序根的绝对路径。
void Application_OnStart()
{
ApplicationConfiguration.OnApplicationStart(Context.Server.MapPath( Context.Request.ApplicationPath ));
string configPath = Path.Combine(Context.Server.MapPath( Context.Request.ApplicationPath ),"remotingclient.cfg");
if(File.Exists(configPath))
RemotingConfiguration.Configure(configPath);
}
2、ApplicationConfiguration.OnApplicationStart静态方法里调用System.Configuration.ConfigurationSettings.GetConfig方法处理配置节:
public static void OnApplicationStart(String myAppPath)
{
appRoot = myAppPath;
System.Configuration.ConfigurationSettings.GetConfig("ApplicationConfiguration");
System.Configuration.ConfigurationSettings.GetConfig("DuwamishConfiguration");
System.Configuration.ConfigurationSettings.GetConfig("SourceViewer");
}
大家已经注意到了,Duwamish并没有获取GetConfig返回的值,因为前面已经说过,GetConfig方法会引发配置节处理程序的Create方法,所以,只需要在Create方法中将配置值取出来就行了。
3、配置读取示例:Duwamish7.Common.DuwamishConfiguration类
public Object Create(Object parent, object configContext, XmlNode section)
{
NameValueCollection settings;
try
{
NameValueSectionHandler baseHandler = new NameValueSectionHandler();
settings = (NameValueCollection)baseHandler.Create(parent, configContext, section);
}
catch
{
settings = null;
}
if ( settings == null )
{
dbConnectionString = DATAACCESS_CONNECTIONSTRING_DEFAULT;
pageCacheExpiresInSeconds = WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT;
enablePageCache = WEB_ENABLEPAGECACHE_DEFAULT;
enableSsl = WEB_ENABLESSL_DEFAULT;
}
else
{
dbConnectionString = ApplicationConfiguration.ReadSetting(settings, DATAACCESS_CONNECTIONSTRING, DATAACCESS_CONNECTIONSTRING_DEFAULT);
pageCacheExpiresInSeconds = ApplicationConfiguration.ReadSetting(settings, WEB_PAGECACHEEXPIRESINSECONDS, WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT);
enablePageCache = ApplicationConfiguration.ReadSetting(settings, WEB_ENABLEPAGECACHE, WEB_ENABLEPAGECACHE_DEFAULT);
enableSsl = ApplicationConfiguration.ReadSetting(settings, WEB_ENABLESSL, WEB_ENABLESSL_DEFAULT);
}
return settings;
}
这里可以看到,Duwamish其实并没有自己手工从一个XmlNode里面读取数据,而是直接将数据转给一个NameValueSectionHandler做实际的配置读取,它自己所做的工作只是检查是否有实际定义的配置值,如果没有的话,就赋给默认值。
--------------------------------------------------------------------------------
总结:
至此,web.config中的配置值就被读到了配置类的静态变量中,以后在程序的其它地方就可以使用配置类的静态变量来直接访问配置值了,例如,在程序的任何地方,只要输入Duwamish7.Common.DuwamishConfiguration.ConnectionString就可以得到:server=LUYAN\NetSDK;User ID=Duwamish7_login;Password=password;database=Duwamish7;Connection Reset=FALSE这个字符串。更为理想的是,你可以扩展自己的配置节和配置节处理程序,对比较复杂的自定义配置进行预处理。
--------------------------------------------------------------------------------
做人要厚道,请注明转自chinazhan中国站长(www.ChinaZhan.com)。
<add key="secure" value=" " />
<add key="docs\common" value=" " />
<add key="docs\dataaccess" value=" " />
<add key="docs\facade" value=" " />
<add key="docs\rules" value=" " />
<add key="docs\web" value=" " />
</SourceViewer>
配置节信息分为两个主区域:配置节处理程序声明区域和配置节设置区域,这里就是刚才定义的三个section的配置节设置区域,它包含实际的配置设置,其用途说明请参见注释,所有配置信息都必须驻留在 <configuration> 和 </configuration> 根 XML 标记之间,配置节设置区域位于 <configSections> 区域之后。
--------------------------------------------------------------------------------
配置节处理程序
前面已经介绍了,section里定义了处理配置节的类:Duwamish7.SystemFramework.ApplicationConfiguration和Duwamish7.Common.DuwamishConfiguration,他们分别位于SystemFramework和Common项目中,.net规定,所有能够处理配置节的类必须要实现IConfigurationSectionHandler接口,而IConfigurationSectionHandler接口很简单,只有一个object Create(object parent,object configContext,XmlNode section)方法,这个方法不需要主动调用,它是在ConfigurationSettings.GetConfig这个静态方法的时候自动调用的,也就是说,当你在程序中使用ConfigurationSettings.GetConfig来获取配置节的时候,.net会根据改配置节声明中所定义的类名和路径自动实例化配置节处理类,并调用Create方法。下面是Duwamish的处理类调用流程:
1、在global.asax的Application_OnStart方法里面调用ApplicationConfiguration.OnApplicationStart静态方法,并获得应用程序根的绝对路径。
void Application_OnStart()
{
ApplicationConfiguration.OnApplicationStart(Context.Server.MapPath( Context.Request.ApplicationPath ));
string configPath = Path.Combine(Context.Server.MapPath( Context.Request.ApplicationPath ),"remotingclient.cfg");
if(File.Exists(configPath))
RemotingConfiguration.Configure(configPath);
}
2、ApplicationConfiguration.OnApplicationStart静态方法里调用System.Configuration.ConfigurationSettings.GetConfig方法处理配置节:
public static void OnApplicationStart(String myAppPath)
{
appRoot = myAppPath;
System.Configuration.ConfigurationSettings.GetConfig("ApplicationConfiguration");
System.Configuration.ConfigurationSettings.GetConfig("DuwamishConfiguration");
System.Configuration.ConfigurationSettings.GetConfig("SourceViewer");
}
大家已经注意到了,Duwamish并没有获取GetConfig返回的值,因为前面已经说过,GetConfig方法会引发配置节处理程序的Create方法,所以,只需要在Create方法中将配置值取出来就行了。
3、配置读取示例:Duwamish7.Common.DuwamishConfiguration类
public Object Create(Object parent, object configContext, XmlNode section)
{
NameValueCollection settings;
try
{
NameValueSectionHandler baseHandler = new NameValueSectionHandler();
settings = (NameValueCollection)baseHandler.Create(parent, configContext, section);
}
catch
{
settings = null;
}
if ( settings == null )
{
dbConnectionString = DATAACCESS_CONNECTIONSTRING_DEFAULT;
pageCacheExpiresInSeconds = WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT;
enablePageCache = WEB_ENABLEPAGECACHE_DEFAULT;
enableSsl = WEB_ENABLESSL_DEFAULT;
}
else
{
dbConnectionString = ApplicationConfiguration.ReadSetting(settings, DATAACCESS_CONNECTIONSTRING, DATAACCESS_CONNECTIONSTRING_DEFAULT);
pageCacheExpiresInSeconds = ApplicationConfiguration.ReadSetting(settings, WEB_PAGECACHEEXPIRESINSECONDS, WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT);
enablePageCache = ApplicationConfiguration.ReadSetting(settings, WEB_ENABLEPAGECACHE, WEB_ENABLEPAGECACHE_DEFAULT);
enableSsl = ApplicationConfiguration.ReadSetting(settings, WEB_ENABLESSL, WEB_ENABLESSL_DEFAULT);
}
return settings;
}
这里可以看到,Duwamish其实并没有自己手工从一个XmlNode里面读取数据,而是直接将数据转给一个NameValueSectionHandler做实际的配置读取,它自己所做的工作只是检查是否有实际定义的配置值,如果没有的话,就赋给默认值。
--------------------------------------------------------------------------------
总结:
至此,web.config中的配置值就被读到了配置类的静态变量中,以后在程序的其它地方就可以使用配置类的静态变量来直接访问配置值了,例如,在程序的任何地方,只要输入Duwamish7.Common.DuwamishConfiguration.ConnectionString就可以得到:server=LUYAN\NetSDK;User ID=Duwamish7_login;Password=password;database=Duwamish7;Connection Reset=FALSE这个字符串。更为理想的是,你可以扩展自己的配置节和配置节处理程序,对比较复杂的自定义配置进行预处理。
--------------------------------------------------------------------------------
做人要厚道,请注明转自chinazhan中国站长(www.ChinaZhan.com)。
