发布网友 发布时间:2022-12-26 22:54
共1个回答
热心网友 时间:2023-10-17 11:52
当我们开发系统的时候要把一部分设置提取到外部的时候 那么就要用到 NET的配置文件了 比如我的框架中使用哪个IOC容器需要可以灵活的选择 那我就需要把IOC容器的设置提取到配置文件中去配置 实现有几种方法
使用appSettings
这个是最简单的可以设置和读取的用户设置
程序中可以用key去读取
string objContainer = ConfigurationManager AppSettings[ objectContainer ];
简单实用但是不够优雅
实现自己的配置节点
首先在configSections节点配置自己的配置解析类
那么如何来解析这段配置呢?有两个办法
方法
实现IConfigurationSectionHandler接口来自己解析配置文件的xml文件
public class ObjectContainerElement
{
public string Provider {get;set;}
public string IocMole {get; set;}
}
public class AgileFRConfigurationHandler: IConfigurationSectionHandler
{
public object Create(object parent object configContext XmlNode section)
{
var node =section ChildNodes[ ];
if (node Name != objectContainer )
throw new ConfigurationErrorsException( 不可识别的配置项 node);
var config = new ObjectContainerElement();
foreach (XmlAttribute attr in node Attributes)
{
switch (attr Name)
{
case provider :
config Provider = attr Value;
break;
case iocMole :
config IocMole = attr Value;
break;
default:
throw new ConfigurationErrorsException( 不可识别的配置属性 attr);
}
}
}
return config;
}
//使用
var config = ConfigurationManager GetSection( 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( iocMole IsRequired = false)]
public string IocMole
{
get
{
return (string)this[ iocMole ];
}
set
{
this[ iocMole ] = (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)ConfigurationManager GetSection( agileFRConfiguration );
var objectContainer=configurationHandler ObjectContainer;
这个方法简单优雅 我喜欢
Settings settings
lishixin/Article/program/net/201311/12163