对于小型项目来说,配置信息可以通过appSettings进行配置,而如果配置信息太多,appSettings显得有些乱,而且在开发人员调用时,也不够友好,节点名称很容易写错,这时,我们有几种解决方案

1 自己开发一个配置信息持久化类,用来管理配置信息,并提供面向对象的支持
2 使用.net自带的configSections,将配置信息分块管理,并提供实体类,便于开发人员友好的去使用它

本文主要说说第二种方案,它由实体类,实体类工厂及配置文件三个部分,看代码:

实体类设计:

namespace Configer
{
/// <summary>
/// 网站信息配置节点
/// </summary>
public class WebConfigSection : ConfigurationSection
{
/// <summary>
/// 网站名称
/// </summary>
[ConfigurationProperty("WebName", DefaultValue = "", IsRequired = true, IsKey = false)]
public string WebName
{ get { return (string)this["WebName"]; }
set { this["WebName"] = value; }
}
/// <summary>
/// 网站域名
/// </summary>
[ConfigurationProperty("DoMain", DefaultValue = "", IsRequired = true, IsKey = false)]
public string DoMain
{ get { return (string)this["DoMain"]; }
set { this["DoMain"] = value; }
} }
}

实体工厂类设计,主要用来生产实体配置信息

namespace Configer
{
/// <summary>
/// 网站配置信息工厂
/// </summary>
public class WebConfigManager
{
/// <summary>
/// 配置信息实体
/// </summary>
public static readonly WebConfigSection Instance = GetSection(); private static WebConfigSection GetSection()
{
WebConfigSection config = ConfigurationManager.GetSection("WebConfigSection") as WebConfigSection;
if (config == null)
throw new ConfigurationErrorsException();
return config;
}
}
}

而最后就是.config文件了,它有configSections和指定的sections块组成,需要注意的是configSections必须位于configuration的第一个位置

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="WebConfigSection" type="Configer.WebConfigSection, test"/>
</configSections>
<connectionStrings>
<add name="backgroundEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\sqlexpress;Initial Catalog=background;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
</connectionStrings> <WebConfigSection WebName="占占网站" DoMain="www.zhanzhan.com" />
<appSettings>
<add key="site" value="www.zzl.com"/> </appSettings>
</configuration>

以上三步实现后,我们就可以调用了,呵呵

  static void Main(string[] args)
{
Console.WriteLine(System.Configuration.ConfigurationManager.AppSettings["site"]);
Console.WriteLine(WebConfigManager.Instance.DoMain);
Console.WriteLine(WebConfigManager.Instance.WebName);
}

结果如下:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAANUAAABQCAIAAAABX6e/AAAIz0lEQVR4nO2a2U8VVxzHx8eitu5VbJVNVFBAZVHArXUrirhwcemSNqlJ3RVcUFkVkU3BrTa2qcZqo5CaNm2aNIHEt7omJfFvuDyJgHDvXEWnD7+5h7lntnO3OcPl983v4cz3nmWG+fCbc86MIAWh51VJQmFrMD0EojZJEKTWd/KRY5TkuOdfB8+rkgRBSKp4HvJTC1D+XVGrY5SgrtBaJHC4F0FLCLJ9a5HG3yLcqkyWBEGOpAqrRw+HGK+otUjQ/s9pcwxH+KTg+UOhghHyh+Ip4fl/DzEweAXmPxRPYf7D4BnIHwbPkPmLStgTZIyetWf0rL0QYxL3jkncNyZx35jZ+8bKsX/snP3vQ8w98AGJpIPjIJIPjks+OD750PjkQ+PnHRo/79CEeYcnzD88Yf7hiRApxRNTiielFE9KLZ6UWjIptWRyasnktJLJaUcmpx2ZknZkygKIox8ulGPqwmNTF8kxLf3YtPTjENEZx6MzSqMzSqMzS6dnlk7PPDE988RHWd5YfPJjEktOzYDIPjUju2wmRE5ZTE5ZTE55TE55TG55bG55bG5F7NKK2KUVcRDLKuOWVcYvq4xfXhm/vCp+eVXC8qqEFVUJK6pnraietVKOxJWnEz+RY/anZ0jMWXVmzqqaOatq5q6GODt39dmkNRC1SWtrk0msOzfPG/M/q5Mjry4lry4lrz4lrz5lfX3q+vrU9Q2pGxpSNzSkbWhI29CYlt+Ylt+4IL9xwcbGBRubFkIUNC0sOL+o4PyiTRAX0jddSN8sR8aWZojMLc2ZW1sgsra2ZBW2ZBVezCq8uNgBcWmx49KSIojL2duGImf7FTl2XMndcVWOnVeRP+TPNvxV19QxxlrHyaiE3cgf8hdK/v599EQzHj1++vjps0dPnj18/BSc6pq6qLhdyB/yF0r+XJ43jFFdU/ceV/5g9U7xBybFH5gB8wfNI54/uEzO/A0ODrZ3dDoq2radvrfj3N3Pz9/56vKtLqfTI7pJ5O656RHdmvwp93WAPygT/pQVguFPhs83/4FJ5T8wIf+pN59M+ZPhW3JqRvYpdfOYnHK1GbfU5/Ut4Y+qFjB/0Dy0/EGfkP+UJxlW/mAIH/7eDg62d3QeuPrX4et/ltz4/ejt+6X32hj5g+5Y8h8v/qalH5ckSfS8ic44HjB/M7PLCHyEv9jcCgIf5D8vfD75j5AHBevzH4xrzB/kPwv4AwR9+Ovrd7V3dFbe+aeg7se8hkv5Lc2bv28E/kTRLbpdHtG9+VqjZfxBzdDyR6R8/oJjzB95/ir5I89f5C8E/L3qd7V3dK6rvbL+/MWCyxe2/NDg+Lm2y+kURZHkv91/H1DzJ/kK+COHLPyRyqb5D6pR6w8vfD7rDwKfKX+a+W8IPgV/Xvh85n9gKud/BvwRChNXnoZyX79IfMIfcZT8EVPJHzGV/CnHAv6UjpI/cKj1B5gUf6Q54U/yFeGPOIQ/qqYOfwPu9o7O/OaWTVebtl6v33azZuedqi6n87VHVD6C2fMfmKb8gTMuWS6ElT/R8wZ8XvxR6w9yS5T5D5y5q2u8Bd35HxwSCoE/KKfk1UPBOP+BacofOJmkoOCPyn9gLimSmVPmP3D089+Au72jc/O1RsdP57bfOvPFrxVft53ocjo9bpcF/BEZ8AcVqP0XMKn9FzCp/RfJO/8zXf9Cc2r/BUxq/Qsmtf4Fk5G/vn6Rev76yx8RxZ/p81eGT7X/wshfVuFQCqT4IyL8waHh83fA3d7RWXTj7M7b1V/eLfvmt9Jv/zjS5XQ+8Up0u3t7e3pedocp/5muP0LFH/waMH9QoPiDgpo/KIeVP2r+B6Y1/MH8D0wq/1HzP3P+BlzirV/ut3d0KkPJ30B/f3d3d/eLF37N/yRJUu+/gNTzP0mR/+AwVPypRzdYf4Cj5E/dnGX/RVOEP6VJrT+Ib7r/ouzEYP4H+y/E1ONPfbbBzP8kb/6jamrvv7zsc0tvPZL0etAzIL0VJemtJL1+98Ylul1ul+vVq76e3p7e3p5Xfb1c9p/hjKn3H2BS7z/ADPj9BzS35/sPNX8B7/8NwWeT9x8ny89ovu2trW8619B8WuGs2VKM79+s5E+ZPCL2/VtU/Hfvxe1iiai4Xfj9QSS9f7MHf/j9FfKH/CF/I44/DAwuIfNXhULx0BB/K1Aoy+XDn4BCWSzkD8VTyB+Kp5A/FE/ZnL8HCvE+F1QYZHP+QMhfxAr5Q/GUkj/qNpNDf309PVDJ2GfvWXMIU990XFTYZTF/mpVNO2GEQ800Y1nzclBWSJM/6n7465tKr6a/fgDNkT97yWL+AiMM+YtYUesPNVsgf33iaFYmh8a+XkOW/v0qI3/cZD1/Shn7jD9pDsriGx+irNCw2H9BRayQPxRPIX8onkL+UDyF/KF4CvlD8RTyh+IpO/CnuWM3jPpHBS478CeEf+8X+bOpkD8UT9nh+z/TPg1MAz/k/TNemqlvcJ4jTnb4/k/wnaJp9qM0Dcph7d/guljOTV02OJ+RIpt8/2d8q5T0GFS2rH/T4VgGFZA/wZbf/6n7Zyxb0H/wFyUgf0rZ4fs/IUR8hLt/luvyq6z3pxtBstX3f1Sf1E+aY2lWDlP/etdFDW3qGx+OLNlk/wU1QoX8oXgK+UPxlCl//k5NwjGV0exz5M6ZIkkW86deImiKpVvkLxJkPX+B9YD8RaZY+GNMUSz1/eXPYFzkLxLEN/9pHjKOyPj/gLK1uPBHpUO9Q+OekblIEK/8Z0Ce3kMW+YtAcXz+6vGE/I0gqfnTWjwYzbT8qu8vf2qf5ZRQw0aa/BnU1+SPvb4aJvWhZhM9Ok1PAGVrIX8onuLCHwuF6n70nrbI3zCW9fzpZUS1o8kc8hdR4vX8ZWzCMhzyN4zFcf2r1gOG9x8sp4QaNrJb/gugAvI3jBXy/WeqIWPzwEbRbOVv/kbxlCZ/D3RmYHr3W7Nn4lM9BPBc1qsTWCuUjaSX/9T0GNxIYy41CVabphyr62gSySi9a0FZqf8BPVYcpfF9eqYAAAAASUVORK5CYII=" alt="" />

基础才是重中之重~用好configSections让配置信息更规范的更多相关文章

  1. 基础才是重中之重~ConcurrentDictionary让你的多线程代码更优美

    回到目录 ConcurrentDictionary是.net4.0推出的一套线程安全集合里的其中一个,和它一起被发行的还有ConcurrentStack,ConcurrentQueue等类型,它们的单 ...

  2. WPF MVVM UI分离之《交互与数据分离》 基础才是重中之重~delegate里的Invoke和BeginInvoke 将不确定变为确定系列~目录(“机器最能证明一切”) 爱上MVC3系列~全局异常处理与异常日志 基础才是重中之重~lock和monitor的区别 将不确定变成确定~我想监视我的对象,如果是某个值,就叫另一些方法自动运行 将不确定变成确定~LINQ DBML模型可以对

    WPF MVVM UI分离之<交互与数据分离>   在我们使用WPF过程中,不可避免并且超级喜欢使用MVVM框架. 那么,使用MVVM的出发点是视觉与业务逻辑分离,即UI与数据分离 诸如下 ...

  3. 基础才是重中之重~关于ThreadStatic和Quartz的一点渊源

    回到目录 ThreadStatic ThreadStatic是C#里的一个特性,它可以让你的字段在一个线程里有效,但你不能控制这个字段在何时被回收,即如果声明一个int32的字段为ThreadStat ...

  4. 基础才是重中之重~方法override详解

    回到 目录 之所以写这篇文章,完全是因为这次代码审核,这次代码审核过程当中,出现了很多我认为基础知识不够扎实的问题,所以,打算把它们记录下来,共大家分享. 方法的override,即方法的覆写或者重写 ...

  5. 基础才是重中之重~stream和byte[]的概念与转化

    回到目录 多看几篇 之所以写这篇文章完全是因为最近在研究FastDFS这个分布式的文件存储系统,当然这不是我第一次研究它了,就像我们去看一本书,我们不会只看一篇,而是一次次,一篇篇,每看一次会有新的收 ...

  6. 基础才是重中之重~理解linq中的groupby

    linq将大部分SQL语句进行了封装,这使得它们更加面向对象了,对于开发者来说,这是一件好事,下面我从基础层面来说一下GroupBy在LINQ中的使用. 对GroupBy的多字段分组,可以看我的这篇文 ...

  7. 基础才是重中之重~lock和monitor的区别

    回到目录 Monitor的介绍 1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中 ...

  8. C# 基础才是重中之重~对象的生与死

    为何要写 之所以写这篇文章,完全是因为学生们在实际开发中遇到的问题,一个对象占用的内存空间总不被释放,导致系统内存不断攀升,其最主要原因是我们对“对象的生与死”不清楚,或者从来没有认真去考虑过这件事, ...

  9. 基础才是重中之重~Emit动态构建方法(参数和返回值)

    回到目录 对于Emit我们知道它的可以动态构建程序集,类型,方法,属性等,或者说只要手动使用C#创建的东西使用Emit也都可以动态创建它们,Emit由于它的特别之处,所以在很多领域得到了广泛的应用,像 ...

随机推荐

  1. 信息安全试验-DES加密!

    信息安全试验二--DES加密算法 本渣表示没有理解原理,照着书上敲了一发,运行无误! 吐槽:手动S盒简直丧心病狂,扩展置换表全是手动输入,加密原理还是很好理解,两次异或,先混淆. 此代码数据由老师给出 ...

  2. 04-offsetLeft和style.left的区别

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. 在LoadRunner中执行命令行程序之:popen()取代system()

    我想大家应该都知道在LoadRunner可以使用函数system()来调用系统指令,结果同在批处理里执行一样. 但是system()有个缺陷:无法获取命令的返回结果. 也许你可以用`echo comm ...

  4. cell左右滑动展开更多按钮-MGSwipeTableCell

    MGSwipeTableCell是一个UITableViewCell的子类, 它实现了左,右滑动展开更多按钮用来实现一些相关操作就和QQ好友列表滑动展开的按钮一样,封装的很好,动画效果也处理很到位,废 ...

  5. 【Luogu】P2680运输计划(树上差分+二分)

    题目链接 总体思路……怎么说呢……是个暴力吧…… 首先用倍增预处理出每条路径的长度. 然后按长度把路径排序. 然后二分答案.对于当前答案mid检验,怎么检验呢? 首先差分把所有长度比mid大的链上除了 ...

  6. BZOJ 2438 [中山市选2011]杀人游戏 ——期望DP

    发现每一次死亡的几率相等,所以只需要判断最少问多少人即可. 并且环上的点任意询问都可以. 所以直接Tarjan缩点,然后计算入度为0的点的数目. 但是还有一些情况的时候会减少一次询问,比如说:$1-& ...

  7. Jerasure库接口简介及性能测试

    http://blog.chinaunix.net/uid-20196318-id-3277600.html Jerasure库提供Reed-Solomon和Cauchy Reed-Solomon两种 ...

  8. CSV文件导出2

    public void exportCSVFile( HttpServletResponse response, ResultSet rs,String fileName,String headers ...

  9. formSubmit

    精简代码: <form name='form0001' method="post"> .... <li id="view"><a ...

  10. 关于 最短路条数 和 边不可重复最短路条数问题 /hdu3599(边不可重复最短路)

    原先一直在做一道省赛题,由于题意错误理解成球最短路条数,误打误撞敲了最短路条数,又发现hdu3599(多校)求边不可重复最短路条数.下面说说俩种问题解法: 最短路条数: 求一个图一共一几条最短路径,思 ...