stand on the shoulders of giants

利用XML,自定义配置信息

来源: http://www.cnblogs.com/allenlooplee/archive/2008/12/14/1354492.html

自定义配置文件,例如

<Options>
  
<Option Name="MaxSelectionCount" Value="18"></Option>
  
<Option Name="MinDate" Value="10/18/2008"></Option>
  
<Option Name="MaxDate" Value="12/03/2008"></Option>
</Options>

 

读取设置, 效果:      OptionsManager.Instance["MaxSelectionCount"] = 20;
类似与:                 ConfigurationManager.AppSettings["connectionString"];

OptionsManager类,用到了单件模式, 索引 

class OptionsManager
{
        
private OptionsManager()
        {
            _options 
= LoadOptions();
        }          

        
public static readonly OptionsManager _Instance = new OptionsManager();
        
private Dictionary<stringstring> _options = new Dictionary<stringstring>();

        
public static OptionsManager Instance
        {
            
get
            {
                
return _Instance;
            }
        }

        
public string this[string name]
        {
            
get { return _options[name]; }
            
set { _options[name] = value; }
        }
}

 

从配置XML文件中读取到字典中
用到了.NET 3.0的: Anonymous Collection, LINQ To XML, LINQ To XML's Projection

private Dictionary<stringstring> LoadOptions()
{
            
if (File.Exists(GetXMLPath()))
            {
                System.Diagnostics.Debug.WriteLine(
"true");
            }

            
//XElement root = XElement.Load(GetXMLPath());
            
//IEnumerable<XElement> options =
                from item in root.Elements("Option")
                select item;

            var optionsDict 
=
                from item 
in XElement.Load(GetXMLPath()).Elements("Option")
                select 
new
                {
                    Name 
= item.Attribute("Name").Value,
                    Value 
= item.Attribute("Value").Value
                };
    
            
return optionsDict.ToDictionary(sr => sr.Name, sr=>sr.Value);
}

 

--------------------------------------------------------
reference:http://www.cnblogs.com/allenlooplee/archive/2009/01/19/1378594.html
稍微复杂点的:
 
配置一个InterceptionManager类,构造函数
      1. 读取这个文件,
      2. 每条Interception都读取为一个MessageInterceptor对象,
      3. 注意枚举类型的转换
 
InterceptionManager类包含方法
 

这样下面两行代码就能实现读取并使用所有MessageInterceptor配置
 

posted @ 2009-05-04 16:43  DylanWind  阅读(467)  评论(0编辑  收藏  举报