技术开发 频道

Enterprise Library 2.0 技巧:如何使用外部配置文件

【IT168技术文档】

摘要:我们知道在Enterprise Library1.1中对于每一个应用程序块都有一个对应的配置文件,而在Enterprise Library2.0中却把所有的配置信息都放在了应用程序配置文件(App.configWeb.config)中,在2.0下,我们如何使用外部配置文件?如何为每个应用程序块创建对应的配置文件?
主要内容

1.不使用外部配置文件
2.使用不同的ConfigurationSource
3.使用多个ConfigurationSource
4.使用.NETconfigSource特性

一.不使用外部配置文件  

我们先来看一个简单的使用Enterprise Library的例子,在这个示例中,使用了企业库的Data Access Application Block Excepiton Handling Application Block

using System; using System.Collections.Generic;
using System.Text; using Microsoft.Practices.EnterpriseLibrary.Common.Configuration; using Microsoft.Practices.EnterpriseLibrary.Data; using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling; namespace EntLibConfig{ class Program { static void Main(string[] args) {try { Database db = DatabaseFactory.CreateDatabase("EntLibInstance"); db.ExecuteNonQuery("ProcName"); } catch (Exception ex) { if (ExceptionPolicy.HandleException(ex, "Event Policy")) throw; } } }

使用Enterprise Library Configuration配置之后,App.config文件如下:

<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="exceptionHandling"
type
="Microsoft.Practices.EnterpriseLibrary.
ExceptionHandling.Configuration.ExceptionHandlingSettings,
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
/> <section name="dataConfiguration"
type
="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.
DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
/> </configSections> <exceptionHandling> <exceptionPolicies> <add name="Event Policy"> <exceptionTypes> <add type="System.Exception, mscorlib, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
postHandlingAction="ThrowNewException" name="Exception"> <exceptionHandlers> <add exceptionMessage="This is a test!"
replaceExceptionType
="Microsoft.Practices.EnterpriseLibrary.
ExceptionHandling.ExceptionHandlingException, Microsoft.Practices.
EnterpriseLibrary.ExceptionHandling,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.
ReplaceHandler, Microsoft.Practices.EnterpriseLibrary.
ExceptionHandling, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=null"
name="Replace Handler" /> </exceptionHandlers> </add> </exceptionTypes> </add> </exceptionPolicies> </exceptionHandling> <dataConfiguration defaultDatabase="EntLibInstance" /> <connectionStrings> <add name="EntLibInstance"
connectionString
="Server=.\SQLEXPRESS;
Integrated Security=SSPI;Database=Northwind;"
providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>

我们知道在EL1.1下,对于不同的应用程序块是放在了不同的配置文件中,而到了2.0中可以看到,所有的配置信息都放在了应用程序配置文件中(App.config或者Web.config)。但是很多时候配置文件中有很多的信息也是我们自己手动添加的,如果这些混合在一起会显得非常混乱,所以我们并不想把所有的配置信息都放在应用程序配置文件中,该如何实现呢?Tom Hollander给了我们几种可行的方案。

二.使用不用的ConfigurationSource 

Enterprise Library2.0使用实现了IConfigurationSource接口的类来获取配置信息,默认情况下将获取SystemConfigurationSource,就像上面的例子,但是它允许我们配置应用程序来使用不同的ConfigurationSource,下面来看一下具体的使用。

EntLibConfig.exe打开配置文件后,在配置文件节点上选择New | ConfigurationSources

并新建一个File Configuration Source,指定文件的路径和文件名

Configuration Source节点设置SelectSourceFile Configuration Source

保存配置后,此时就有了两个配置文件,App.configexternal.config,分别看一下这两个文件中的内容:

App.config

<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="enterpriseLibrary.ConfigurationSource"
type
="Microsoft.Practices.EnterpriseLibrary.
Common.Configuration.ConfigurationSourceSection,
Microsoft.Practices.EnterpriseLibrary.Common,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
/> </configSections> <enterpriseLibrary.ConfigurationSource selectedSource="File Configuration Source"> <sources> <add name="File Configuration Source"
type
="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.
FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
filePath="D:\Visual Studio2005 Project\EntLibConfig\EntLibConfig\external.config" /> <add name="System Configuration Source"
type
="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.
SystemConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
/> </sources> </enterpriseLibrary.ConfigurationSource> </configuration>

external.config

<configuration> <configSections> <section name="exceptionHandling"
type
="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.
ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
/> <section name="dataConfiguration"
type
="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings,
Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=null"
/> </configSections> <exceptionHandling> <exceptionPolicies> <add name="Event Policy"> <exceptionTypes> <add type="System.Exception, mscorlib, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
postHandlingAction="ThrowNewException" name="Exception"> <exceptionHandlers> <add exceptionMessage="This is a test!"
replaceExceptionType
="Microsoft.Practices.EnterpriseLibrary.
ExceptionHandling.ExceptionHandlingException, Microsoft.Practices.
EnterpriseLibrary.ExceptionHandling, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=null"
type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.
ReplaceHandler, Microsoft.Practices.EnterpriseLibrary.
ExceptionHandling,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
name="Replace Handler" /> </exceptionHandlers> </add> </exceptionTypes> </add> </exceptionPolicies> </exceptionHandling> <dataConfiguration defaultDatabase="EntLibInstance" /> <connectionStrings> <add name="EntLibInstance"
connectionString
="Server=.\SQLEXPRESS;Integrated Security=SSPI;
Database=Northwind;"
providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>

 

 

0
相关文章