熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

.NET 配置文件簡單使用

2013-11-13 09:58:35  來源: .NET編程 

  當我們開發系統的時候要把一部分設置提取到外部的時候那麼就要用到NET的配置文件了比如我的框架中使用哪個IOC容器需要可以靈活的選擇那我就需要把IOC容器的設置提取到配置文件中去配置實現有幾種方法

  使用appSettings

  這個是最簡單的可以設置和讀取的用戶設置

image

  程序中可以用key去讀取

  string objContainer = ConfigurationManagerAppSettings[objectContainer];

  簡單實用但是不夠優雅

  實現自己的配置節點

image

  首先在configSections節點配置自己的配置解析類

  那麼如何來解析這段配置呢?有兩個辦法

  方法

  實現IConfigurationSectionHandler接口來自己解析配置文件的xml文件

  public class ObjectContainerElement

  {

  public string Provider {get;set;}

  public string IocModule {get; set;}

  }

  public class AgileFRConfigurationHandler: IConfigurationSectionHandler

  {

  public object Create(object parent object configContext XmlNode section)

  {

  var node =sectionChildNodes[];

  if (nodeName != objectContainer)

  throw new ConfigurationErrorsException(不可識別的配置項 node);

  var config = new ObjectContainerElement();

  foreach (XmlAttribute attr in nodeAttributes)

  {

  switch (attrName)

  {

  case provider:

  config Provider = attrValue;

  break;

  case iocModule:

  config IocModule = attrValue;

  break;

  default:

  throw new ConfigurationErrorsException(不可識別的配置屬性 attr);

  }

  }

  }

  return config;

  }

  //使用

  var config = ConfigurationManagerGetSection(agileFRConfiguration) as ObjectContainerElement;

  這個方法看上去就略屌了不過就是太麻煩了

  方法

  繼承ConfigurationSection類配合ConfigurationProperty特性來實現

  public class ObjectContainerElement : ConfigurationElement

  {

  [ConfigurationProperty(provider IsRequired = true)]

  public string Provider

  {

  get

  {

  return (string)this[provider];

  }

  set

  {

  this[provider] = (object)value;

  }

  }

  [ConfigurationProperty(iocModule IsRequired = false)]

  public string IocModule

  {

  get

  {

  return (string)this[iocModule];

  }

  set

  {

  this[iocModule] = (object)value;

  }

  }

  }

  ///

  /// 配置處理類

  ///

  public class AgileFRConfigurationHandler : ConfigurationSection

  {

  [ConfigurationProperty(objectContainer IsRequired = true)]

  public ObjectContainerElement ObjectContainer

  {

  get

  {

  return (ObjectContainerElement)this[objectContainer];

  }

  set

  {

  this[objectContainer] = (object)value;

  }

  }

  }

  //使用

  var configurationHandler = (AgileFRConfigurationHandler)ConfigurationManagerGetSection(agileFRConfiguration);

  var objectContainer=configurationHandlerObjectContainer;

  這個方法簡單優雅我喜歡

  Settingssettings

  這個方法我不太喜歡它會自己生成配置文件對應的Class不說了


From:http://tw.wingwit.com/Article/program/net/201311/12163.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.