日期:2014-05-20  浏览次数:20408 次

microsoft Duwamish中非常困惑的问题!
在microsoft   Duwamish中发现了这些代码。
public   static   void   OnApplicationStart(String   myAppPath)
                {
                        appRoot   =   myAppPath;
                        System.Configuration.ConfigurationSettings.GetConfig( "ApplicationConfiguration ");
                        System.Configuration.ConfigurationSettings.GetConfig( "DuwamishConfiguration ");
                        System.Configuration.ConfigurationSettings.GetConfig( "SourceViewer ");
                       
                }

其中的System.Configuration.ConfigurationSettings.GetConfig()方法没有返回值。这样读取配置好像没有意义。这个十分困惑。请高人指点。

------解决方案--------------------
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方法中将配置值取出来就行了。


------解决方案--------------------
进来学习