配置文件读取类

今天研究了一下Duwamish的配置文件的读取方法

首先 web.Config文件中:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  
<configSections>
    
<section name="TempConfiguration" type="Temp.Config.TempConfiguration, Temp" />
  
</configSections>  
  
<TempConfiguration>
    
<add key="Temp" value="aaaaaaa" />
  
</TempConfiguration>
</configuration>

其中TempConfiguration是配置文件的一段,他对应的配置文件类是type="Temp.Config.TempConfiguration, Temp" 。其中Temp.Config.TempConfiguration是具体的类文件,, Temp是该类所在的DLL的名字。还有其他可选参数,例如版本号,公钥等。

配置文件写好以后,还要写读取这个配置的对应的类,也就是Temp.Config.TempConfiguration类。
using System;
using System.Collections;
using System.Configuration;
using System.Xml;
using System.Collections.Specialized;

namespace Temp.Config
{
    
/// <summary>
    
/// TempConfiguration 的摘要说明。
    
/// </summary>

    public class TempConfiguration : IConfigurationSectionHandler
    
{
        
private const string TEMP = "Temp";
        
private static string temp;
        
private const string TEMP_DEFAULT = "aaa";
        
public static string Temp
        
{
            
get{return temp;}
        }


        
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)
            
{
                temp 
= TEMP_DEFAULT;
            }

            
else
            
{
                temp 
= ReadSetting(settings, TEMP, TEMP_DEFAULT);
            }

            
return settings;
        }


        
#region 函数 ReadSetting
        
        
public static String ReadSetting(NameValueCollection settings, String key, String defaultValue)
        
{
            
try
            
{
                Object setting 
= settings[key];
                
                
return (setting == null? defaultValue : (String)setting;
            }

            
catch
            
{
                
return defaultValue;
            }

        }


        
public static bool ReadSetting(NameValueCollection settings, String key, bool defaultValue)
        
{
            
try
            
{
                Object setting 
= settings[key];
                
                
return (setting == null? defaultValue : Convert.ToBoolean((String)setting);
            }

            
catch
            
{
                
return defaultValue;
            }

        }

        
        
public static int ReadSetting(NameValueCollection settings, String key, int defaultValue)
        
{
            
try
            
{
                Object setting 
= settings[key];
                
                
return (setting == null? defaultValue : Convert.ToInt32((String)setting);
            }

            
catch
            
{
                
return defaultValue;
            }

        }

        
        
#endregion
 
    }

}

“.net规定,所有能够处理配置节的类必须要实现IConfigurationSectionHandler接口,而IConfigurationSectionHandler接口很简单,只有一个object Create(object parent,object configContext,XmlNode section)方法,这个方法不需要主动调用,它是在ConfigurationSettings.GetConfig这个静态方法的时候自动调用的,也就是说,当你在程序中使用ConfigurationSettings.GetConfig来获取配置节的时候,.net会根据改配置节声明中所定义的类名和路径自动实例化配置节处理类,并调用Create方法。”Duwamish深入剖析-配置篇

然后在(web)程序启动的时候初始化该类:
void Application_OnStart()
{       System.Configuration.ConfigurationSettings.GetConfig("TempConfiguration");
}

这样,在程序的其他地方,只要使用Temp.Config.TempConfiguration.Temp 就可以得到配置文件(Web.Config)中Temp的值,不需要再去读取配置文件,可以提高速度。而且,如果有比较特殊的类型,例如bool甚至枚举(int)都可以直接读取,无需做类型转换。也不会读到null值(配置文件读取的类中有默认值)。
posted @ 2005-07-12 15:03  阿哲  阅读(652)  评论(0编辑  收藏  举报