.NET 配置文件简单使用
当我们开发系统的时候要把一部分设置提取到外部的时候,那么就要用到.NET的配置文件了。比如我的框架中使用哪个IOC容器需要可以灵活的选择,那我就需要把IOC容器的设置提取到配置文件中去配置。实现有几种方法。
1.使用appSettings
这个是最简单的可以设置和读取的用户设置
程序中可以用key去读取:
string objContainer = ConfigurationManager.AppSettings["objectContainer"];
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
简单实用但是不够优雅。
2.实现自己的配置节点
首先在configSections节点配置自己的配置解析类。
那么如何来解析这段配置呢?有两个办法。
方法1:
实现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 =section.ChildNodes[0];
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 "iocModule":
config .IocModule = attr.Value;
break;
default:
throw new ConfigurationErrorsException("不可识别的配置属性", attr);
}
}
}
return config;
}
//使用
var config = ConfigurationManager.GetSection("agileFRConfiguration") as ObjectContainerElement;
这个方法看上去就略屌了,不过就是太麻烦了。
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
方法2:
继承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;
}
}
} /// <summary>
/// 配置处理类
/// </summary>
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;
这个方法简单优雅,我喜欢。
3.Settings.settings
这个方法我不太喜欢,它会自己生成配置文件对应的Class。不说了。
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
最新文章
- BUAA1389愤怒的DZY(最大值最小化)
- 常用NuGet插件
- css required,focus,valid和invalid介绍
- Es使用。
- Arduino 板子 COM 接口找不到设备
- Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置
- Vim 配置Markdown
- ABAP系统值
- Spring(转载一)
- C# 执行CMD 命令
- java对对象或者map的属性进行排序
- input只允许输入正整数
- vue组件+axios访问本地json
- 【20190123】JavaScript-轮播图特效中出现的问题
- Java8学习笔记(八)--方法引入的补充
- Navicat Premium 12.0.18安装与激活(转)
- centos安装lamp
- 【转载,整理】Linux性能监控
- 『Sklearn』特征向量化处理
- C#的OpenFileDialog的简单用法
热门文章
- Activemq消息持久化
- zookeeper节点Watch机制实例展示
- 多线程socket编程示例
- Turn off swi-prolog protocol output of ANSI terminal control sequences
- 关于stacking context和CSS z-index的总结
- 高效开发Android App的10个建议
- 降低屏幕亮度,减缓眼疲劳 (linux/windows/firefox/android)
- git第一次提交代码到远程仓库
- bss段和data段的区别
- iOS开发备忘录:自定义UINavigationBar背景图片和Back按钮