在介绍完企业库几个常用模块后,我今天要对企业库的配置文件进行处理,缘由是我打开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. 手脱ASProtect v1.23 RC1(无Stolen Code)

    1.载入PEID ASProtect v1.23 RC1 2.载入OD,不勾选内存访问异常,其他异常全部勾选 > 01C04200 push 跑跑排行.0042C001 ; //入口处 E8 c ...

  2. C# 中的委托和事件(详解)

    C# 中的委托和事件 委托和事件在 .NET Framework 中的应用非常广泛,然而,较好地理解委托和事件对很多接触 C# 时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太 ...

  3. 省队集训 Day3 杨北大

    [题目大意] 给出平面上$n$个点$(x_i, y_i)$,请选择一个不在这$n$个点之内的点$(X, Y)$,定义$(X, Y)$的价值为往上下左右四个方向射出去直线,经过$n$个点中的数量的最小值 ...

  4. 【BZOJ】3971 [WF2013]Матрёшка

    [算法]区间DP [题解] 参考写法:BZOJ 3971 Матрёшка 解题报告 第二个DP可以预处理mex优化到O(nM+n2),不过我懒…… 第一个DP有另一种写法:不预处理,在一个n2取出来 ...

  5. Network(POJ3694+边双连通分量+LCA)

    题目链接:http://poj.org/problem?id=3694 题目: 题意:给你一个n个点m条边的无向连通图,进行q次操作,每次操作在u和v之间加一条边,问每次操作之后“桥”的数量. 思路: ...

  6. 聂老师的考验(反向bfs)

    题目链接:http://113.240.233.2:8081/JudgeOnline/problem.php?id=1121 这个题看起来要多次使用bfs,其实只要换个思维就会发现这就是一个简单的bf ...

  7. MSSQL 构建临时表SQL

    declare @StartQuarter int declare @StartYear int declare @EndQuarter int declare @EndYear int declar ...

  8. MSSQL 数据库性能优化

    优化数据库的注意事项: 1.关键字段建立索引. 2.使用存储过程,它使SQL变得更加灵活和高效. 3.备份数据库和清除垃圾数据. 4.SQL语句语法的优化. 5.清理删除日志. SQL语句优化的基本原 ...

  9. 极致的 Hybrid:航旅离线包再加速!(转)

    资源离线的思路简单.场景复杂,最复杂的就是 H5 活动页面的离线化.Mobile Web 在弱网提速的唯一的办法就是坚决杜绝不必要的(运行时)网络请求,即除了 Json 格式的动态数据和其携带的商品配 ...

  10. jeecg3.7中DictSelect数据字典下拉选择框的用法

    1.参数 属性名                      类型        描述                                                           ...