在介绍完企业库几个常用模块后,我今天要对企业库的配置文件进行处理,缘由是我打开web.config想进行一些配置的时候发现web.config已经变的异常的臃肿(大量的企业库配置信息充斥其中),所以决定写这篇关于Configuration Setting模块等其他方式分类管理企业库配置信息的文章。

在ASP.NET4中微软就帮我们优化过了web.config,给了我们一个干净的web.config(将原来需要通过web.config注册的程序集、ASP.NET标签和handler等都移至machine.config中)这样大大方便了我们开发人员。

虽然我们通过企业库的配置工具可以很方便的配置企业库信息,但是如果要在web.config中修改其他信息就麻烦了,而且企业库的各模块信息也都 在一起不利于日后的维护,所以我们首先就要把企业库的配置信息给剥离出来,然后再根据各模块分成一个一个独立的.config配置文件,统一放在一个文件 夹中,这样项目发布后再修改配置信息时也可以立刻找到需要配置的文件。

分离配置文件的方式主要有3种,这3种方式各有优势也各有劣势,主要还是看实际如何应用

1、使用企业库提供的Configuration Setting(只需配置无需修改代码,分离出的模块无法直接统一查看,只能查看单独模块,推荐

2、分离出独立config文件或使用编码的形式来读取配置文件(必须编写代码,使用起来较为麻烦,分离出的模块无法直接统一查看只能查看单独模块,不推荐

3、使用.NET的configSource特性进行配置(无需企业库工具配置,只需分离代码,分离出的模块可以统一查看,但是修改配置文件后所有配置信息又会重新回到web.config中,同时无法修改分离出去的单独配置文件,推荐

一、使用企业库中默认已经提供了Configuration Setting模块来进行配置:

1、首先将各模块的信息先分离成一个一个单独的config文件(包括这个模块的section以及具体的配置)如下(Data Access模块配置文件):

<?xml version="1.0"?>
<configuration>
<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
</configSections>
<dataConfiguration defaultDatabase="EntLibStudy" />
<connectionStrings>
<add name="EntLibStudy" connectionString="server=SQL2005;database=EntLibStudy;Integrated Security=True;"
providerName="System.Data.SqlClient" />
<add name="EntLibStudySQLite" connectionString="data source=|DataDirectory|EntLibStudySQLite.db3"
providerName="System.Data.SQLite" />
</connectionStrings>
</configuration>

2、在企业库中添加一个Configuration Setting模块,然后选择添加一个Filed-Based Configuration Source,将路径选择为刚才所分离好的config配置文件,同时建立一个重定向设置,设置到相对应的企业库模块:

添加Filed-Based Configuration Source

指向配置文件并建立重定项模块

这样项目中有几个企业库模块就建立几个相对应的配置文件,而且不需要修改任何代码。

二、使用编码形式来进行配置:

这种方式使用的配置文件同第一种方式,在配置文件中需要包含section等模块的配置信息,然后在具体使用企业各模块的时候采用如下代码:

//缓存模块
//建立一个FileConfigurationSource来根据文件名读取配置文件
FileConfigurationSource cacheDataSource = new FileConfigurationSource("Cache.config");
//通过模块工厂来读取文件配置源
CacheManagerFactory cacheManagerFactory = new CacheManagerFactory(cacheDataSource);
//建立具体模块实例
ICacheManager cacheManager = cacheManagerFactory.Create("Cache Manager");
cacheManager.Add("test", "test"); //数据访问模块
FileConfigurationSource dbDataSource = new FileConfigurationSource("Data.config");
DatabaseProviderFactory databaseProviderFactory = new DatabaseProviderFactory(dbDataSource);
Database db = databaseProviderFactory.Create("EntLibStudy");
这种方式我个人认为很不方便,每次使用企业库中的模块时候首先要通过FileConfigurationSource 来获取这个模块具体的配置信息,然后才能创建实例对象,如果一旦配置文件名称发生改变将会出现异常,所以并不推荐使用这种方式来管理配置信息

三、使用.NET的configSource特性进行配置:

这种方式的好处是显而易见的,就是不用在企业库中添加Configuration Setting,只需单独建立config文件,然后把所需的配置信息剪切到config文件中即可,但是有几点需要注意:

、有关企业库模块的section信息必须放在web.config中

、在单独放置的config文件应该是一个干净的XML文件,不能包含有<configuration>配置节,仅仅需要某个模块的配置即可

、在web.config中必须保留一句指向config的配置节

虽然这种方式操作最善但是缺点也很突出,就是一旦通过企业库配置工具修改过web.config,企业库的所有配置信息又会在web.config中重新产生,同时无法单独编辑分离出去的单独的config文件

具体配置如下:

web.config:
<cachingConfiguration configSource="Configs/CacheConfig.config"/>

CacheConfig.config:

<?xml version="1.0"?>
<cachingConfiguration defaultCacheManager="Cache Manager">
<cacheManagers>
<add name="Cache Manager" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" expirationPollFrequencyInSeconds="" maximumElementsInCacheBeforeScavenging="" numberToRemoveWhenScavenging="" backingStoreName="NullBackingStore" />
</cacheManagers>
<backingStores>
<add type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="NullBackingStore" />
</backingStores>
</cachingConfiguration>

这样便完成了配置,代码中无需进行任何更改,同时在企业库的配置工具中可以查看具体的配置信息,唯一不好的就是一旦你用企业库的配置工具打开过web.congfig文件后,所有分离到各个配置文件中的配置信息又回重新返回到web.config中,可以说是有利有弊。

以上三种就是企业库配置信息的分类处理方式,总的来说推荐使用顺序是:第一种>第三种>第二种。不过具体的方式还是要根据各种使用需求情况进行选择。

源代码下载:点我下载

 

注意:

1、MSSQL数据库在DataBase目录下(需要自行附加数据库),SQLite数据库在Web目录的App_Data下,由于考虑到项目的大小,所以每个项目的BIN目录都已经删除,如出现无法生成项目请自行添加相关企业库的DLL。

2、由于微软企业库5.0 学习之路这个系列我是准备以一个小型项目的形式介绍企业库的各模块,所以源代码会根据系列文章的更新而更新,所以源代码不能保证与文章中所贴代码相同。

3、项目开发环境为:VS2010+SQL2005。

4、管理员帐户:admin

              密码:admin

微软企业库5.0 学习之路——第八步、使用Configuration Setting模块等多种方式分类管理企业库配置信息的更多相关文章

  1. 微软企业库5.0 学习之路——第六步、使用Validation模块进行服务器端数据验证

    前端时间花了1个多星期的时间写了使用jQuery.Validate进行客户端验证,但是那仅仅是客户端的验证,在开发项目的过程中,客户端的信息永远是不可信的,所以我们还需要在服务器端进行服务器端的验证已 ...

  2. 微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—下篇

    在上一篇文章中, 我介绍了企业库Cryptographer模块的一些重要类,同时介绍了企业库Cryptographer模块为我们提供的扩展接口,今天我就要根据这些 接口来进行扩展开发,实现2个加密解密 ...

  3. 微软企业库5.0 学习之路——第四步、使用缓存提高网站的性能(EntLib Caching)

    首先先补习下企业库的Caching Application Block的相关知识: 1.四大缓存方式,在Caching Application Block中,主要提供以下四种保存缓存数据的途径,分别是 ...

  4. 微软企业库5.0 学习之路——第二步、使用VS2010+Data Access模块建立多数据库项目

    现在我就开始进入学习之路的第二步——Data Access模块,这个模块是企业库中被使用频率最高的模块,它很好的封装了数据库操作应用,为我们进行多数据库系统开发提供了便利,只需更改配置文件就 可以很快 ...

  5. 微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——下篇

    一.独立验证器 我上篇中我将AndCompositeValidator和OrCompositeValidator归为独立验证器,这2个验证器主要是为了第一类验证服务,可以进行多种验证组合在一起进行复杂 ...

  6. 微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(3)

    今天继续介绍Unity,在上一篇的文章中,我介绍了使用UnityContainer来注册对象之间的关系.注册已存在的对象之间的关系,同时着重介绍 了Unity内置的各种生命周期管理器的使用方法,今天则 ...

  7. [EntLib]微软企业库5.0 学习之路——第一步、基本入门

    话说在大学的时候帮老师做项目的时候就已经接触过企业库了但是当初一直没明白为什么要用这个,只觉得好麻烦啊,竟然有那么多的乱七八糟的配置(原来我不知道有配置工具可以进行配置,请原谅我的小白). 直到去年在 ...

  8. 微软企业库5.0 学习之路——扩展学习篇、库中的依赖关系注入(重构 Microsoft Enterprise Library)[转]

    这篇文章是我在patterns & practices看到的一篇有关EntLib5.0的文章,主要介绍了EntLib5.0的这次的架构变化由来,觉得很不错,大家可以看一下! 在过去几年中,依赖 ...

  9. 微软企业库5.0 学习之路——第九步、使用PolicyInjection模块进行AOP—PART4——建立自定义Call Handler实现用户操作日志记录

    在前面的Part3中, 我介绍Policy Injection模块中内置的Call Handler的使用方法,今天则继续介绍Call Handler——Custom Call Handler,通过建立 ...

随机推荐

  1. 微服务与devops的文章推荐

    http://www.sohu.com/a/125040520_355140 http://www.csdn.net/article/2015-11-18/2826253 http://www.cnb ...

  2. Google新出品的数据格式:Protocol Buffer

    转:http://blog.csdn.net/carson_ho/article/details/70037693

  3. javascript实现购物车思路

    /* 思路: 第一步:获取所要操作的节点对象 第二步:当页面加载完后,需要计算本地cookie存了多少[个]商品,把个数赋值给count 第三步:为每一个商品对应的添加购物车按钮绑定一个点击事件onc ...

  4. [洛谷P1858] 多人背包

    洛谷题目链接:多人背包 题目描述 求01背包前k优解的价值和 输入输出格式 输入格式: 第一行三个数K.V.N 接下来每行两个数,表示体积和价值 输出格式: 前k优解的价值和 输入输出样例 输入样例# ...

  5. OScached页面缓存的入门使用

    OSCache的使用: 一,环境的搭建: 1,把oscache.jar file放在 /WEB-INF/lib 目录下(Put the oscache.jar file in the /WEB-INF ...

  6. Large Class--过大的类--要重构的信号

    如果想利用单个类做太多事情,其内往往就会出现太多实例变量.一旦如此,Duplicated Code也就接踵而至.     解决方法:     1.将类内彼此相关的变量,将它们放在一起.使用Extrac ...

  7. 【Foreign】登山 [DP][数学]

    登山 Time Limit: 10 Sec  Memory Limit: 256 MB Description 恶梦是一个登山爱好者,今天他来到了黄山 俗话说的好,不走回头路.所以在黄山,你只能往前走 ...

  8. 洛谷P2901 [USACO08MAR]牛慢跑Cow Jogging

    题目描述 Bessie has taken heed of the evils of sloth and has decided to get fit by jogging from the barn ...

  9. 【Zigbee技术入门教程-02】一图读懂ZStack协议栈的核心思想与工作机理

    [Zigbee技术入门教程-02]一图读懂ZStack协议栈的核心思想与工作机理 广东职业技术学院  欧浩源   Z-Stack协议栈是一个基于任务轮询方式的操作系统,其任务调度和资源分配由操作系统抽 ...

  10. python中的Queue模块

    queue介绍 queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue.python3直接queue即可 在python中,多个线程之间的数据 ...