示例代码下载
一般情况下,包含配置元数据的文件为Windows应用程序的App.Config或Web应用程序的Web.Config文件.这里介绍如何使用外部的置元数据的文件.
通常的方法
首先下面的一段代码是通常的做法,在App.config中写入配置信息,程序中用到了两个Block: Data Access Application Block和Exception Application Block.
AppService.vb
Public
Class AppService
Class AppService

Sub ProcessA()Sub ProcessA()
Try
'生成Database
Dim db As Database = DatabaseFactory.CreateDatabase("rippleyong's ConnectionString")
'产生一个异常
db.ExecuteNonQuery("Get a Exception")
Catch ex As Exception
If ExceptionPolicy.HandleException(ex, "rippleyong's Policy") Then Throw

End Try
End Sub
End Class
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
="rippleyong's Policy"
>
<
exceptionTypes
>
<
add
type
="System.Exception, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
postHandlingAction
="NotifyRethrow"
name
="Exception"
>
<
exceptionHandlers
>
<
add
exceptionMessage
="Replace ExceptionMessage,Haha !!!"
replaceExceptionType
="System.Exception, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
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
>
<
connectionStrings
>
<
add
name
="rippleyong's ConnectionString"
connectionString
="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|ripple.mdf;User Instance=true;"
providerName
="System.Data.SqlClient"
/>
</
connectionStrings
>
</
configuration
>
调用外部的配置元数据文件(结合程序配置文件)
如何使用外部的扩展配置元数据文件呢,这里需要通过配置工具(Enterprise Library Configuration)添加一个Configuration Sources 节点在App.config(web.config)中.添加一个选择File Configuration Source,在File中选择外部的配置元数据文件(在这里是ExternalApp.config)
Configuration Source结构图

Enterprise Library Configuration

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
="System 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
="C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\EnterpriseLibraryTest\EnterpriseLibraryTest\ExternalConfiguration\ExternalApp.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
>
ExternalApp.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
="rippleyong's Policy"
>
<
exceptionTypes
>
<
add
type
="System.Exception, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
postHandlingAction
="NotifyRethrow"
name
="Exception"
>
<
exceptionHandlers
>
<
add
exceptionMessage
="Rplace ExceptionMessage HaHa."
replaceExceptionType
="System.ApplicationException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
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
>
<
connectionStrings
>
<
add
name
="rippleyong's connetionString"
connectionString
="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|ripple.mdf;User Instance=true;"
providerName
="System.Data.SqlClient"
/>
</
connectionStrings
>
</
configuration
>
使用单独的ConfigurationSources
从上面的例子中我们可以看到,还是不是完全独立的,因为你必须在App.Config(Web.Config)中告诉Enterprise Library外部配置元数据文件的位置.
下面的代码演示了直接在程序中找到外部配置元数据文件.
Sub ProcessB()
Sub ProcessB()
Try
Dim dataSource As New FileConfigurationSource("data-filesource.config")
Dim dbFactory As DatabaseProviderFactory = New DatabaseProviderFactory(dataSource)
Dim db As Database = dbFactory.Create("rippleyong's ConnectionString")
db.ExecuteNonQuery("Get a Exception")

Catch ex As Exception

Dim dataSource As New FileConfigurationSource("exceprion-filesource.config")
Dim exceptionFactory As ExceptionPolicyFactory = New ExceptionPolicyFactory(dataSource)
Dim exceptionPolicy As ExceptionPolicyImpl = exceptionFactory.Create("rippleyong's Policy")
If exceptionPolicy.HandleException(ex) Then Throw
End Try
End Sub
data-filesource.config
<?
xml version="1.0" encoding="utf-8"
?>
<
configuration
>
<
configSections
>
<
section
name
="dataConfiguration"
type
="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
/>
</
configSections
>
<
connectionStrings
>
<
add
name
="rippleyng's Connection"
connectionString
="Database=ripple;Server=(local)\SQLEXPRESS;Integrated Security=SSPI;"
providerName
="System.Data.SqlClient"
/>
</
connectionStrings
>
</
configuration
>
exception-filesource.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
="rippleyong's Policy"
>
<
exceptionTypes
>
<
add
type
="System.Exception, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
postHandlingAction
="ThrowNewException"
name
="Exception"
>
<
exceptionHandlers
>
<
add
exceptionMessage
="Rplace ExceptionMessage HaHa."
replaceExceptionType
="System.ApplicationException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
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
>
</
configuration
>