当我们开发系统的时候要把一部分设置提取到外部的时候那么就要用到NET的配置文件了比如我的框架中使用哪个IOC容器需要可以灵活的选择那我就需要把IOC容器的设置提取到配置文件中去配置实现有几种方法
使用appSettings
这个是最简单的可以设置和读取的用户设置
程序中可以用key去读取
string objContainer = ConfigurationManagerAppSettings[objectContainer];
简单实用但是不够优雅
实现自己的配置节点
首先在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不说了