企業(yè)庫異常處理塊(Enterprise Library Exception Handling Block)提供了處理異常所需的所有基本代碼,現(xiàn)在,你可以不用再編寫這些重復(fù)性的異常處理代碼,只需簡單地在程序中使用它們,就可保證一致且高效地異常處理。
在一個理想的程序世界中,編寫的所有代碼都是運行無誤的,但現(xiàn)實是,無論你在編寫代碼時多么地小心,錯誤總會發(fā)生,所以,必須要有一個高效、可配置的框架(framework),以一種“優(yōu)雅”方式來處理錯誤;另外,也必須要懂得,人們通常以對程序的用戶體驗帶來多大影響,來衡量一種異常處理的有效性。因此,一個好的異常處理解決方案不單是從用戶的觀點“優(yōu)雅”地處理錯誤,而且還可通過開發(fā)者或系統(tǒng)管理員以可配置的錯誤處理行為,提供健壯的配置設(shè)定,這也是異常處理塊的關(guān)鍵組成部分。
與Enterprise Library 2.0一同到來的是嶄新的異常處理應(yīng)用程序塊,自從老的異常管理應(yīng)用程序塊發(fā)布以來,其經(jīng)過了巨大的改進,可從MSDN下載EntLib Caching Block獲得。為有效地使用,你必須接受以下三個主要觀點:
? 異常處理是在你的代碼探測到有異常發(fā)生時,處理異常的一個過程。
? 異常日志記錄是記錄一個異常的過程,其包括發(fā)送格式化異常到事件記錄器或發(fā)送一封E-mail,而異常處理塊則利用了日志記錄和事件記錄。
? 異常處理策略允許你控制異常處理和使用外部配置文件記錄的行為,這樣就的好處是,現(xiàn)在不用在代碼中實施這樣的規(guī)則了,換句話來說,你可在一個策略文件中定義異常處理,然后,在不改變代碼的情況下,在測試、調(diào)試、產(chǎn)品定型期間修改行為以適應(yīng)不同的異常處理需要。
另外,使用異常處理塊,在探測到異常時,可做以下三件事情:
? 你可把異常包裝為一個新的異常,并加入新的上下文信息或錯誤詳細信息。當(dāng)新的異常傳遞到調(diào)用堆棧時,仍可通過InnerException屬性訪問到原始的異常。
? 你可用一個新的異常取代原有異常。一般來說,這樣做的目的,是不想讓原始異常的詳細信息傳遞出程序。
? 你可以記錄異常。當(dāng)然,也可結(jié)合使用包裝或取代的方法來達到此目的,或者,你可以記錄原始異常并把它傳遞到調(diào)用堆棧。
使用異常處理塊
在安裝完企業(yè)庫(Enterprise Library)之后,就可利用異常處理塊開始編寫代碼了,為正確使用異常處理塊,請遵循以下步驟:
1、 在你的解決方案中分別添加一個對Microsoft.Practices.EnterpriseLibrary.Common.dll和Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.dll程序集的引用,可使用“添加引用”選項,并定位到X:/Program Files/Microsoft Enterprise Library January 2006/bin文件夾,如果還想使用異常處理日志記錄,請再添加一個對Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.dll的引用。
2、 像如下所示,在根下的中添加必要的項目到你的app.config(Windows Forms)或web.config(ASP.NET程序)文件。
name="exceptionHandling"
type="Microsoft.Practices.
EnterpriseLibrary.
ExceptionHandling.
Configuration.
ExceptionHandlingSettings,
Microsoft.Practices.
EnterpriseLibrary.
ExceptionHandling" />
3、 如果隨同異常處理一塊使用日志記錄,還需要在中加入以下設(shè)置。
name="loggingConfiguration"
type="Microsoft.Practices.
EnterpriseLibrary.Logging.
Configuration.LoggingSettings,
Microsoft.Practices.
EnterpriseLibrary.Logging" />
4、 接下來,直接在下添加,在之內(nèi),你可添加所有的異常處理策略,以下的代碼,表示在中指定了一個名為“Global Policy”的策略。
type="System.Exception,
mscorlib, Version=2.0.0.0,
Culture=neutral,
PublicKeyToken=b77a5c561934e089"
postHandlingAction="None">
type="ExceptionMgmtBlockExample.
AppMessageExceptionHandler,
ExceptionMgmtBlockExample"/>
上述的設(shè)置指定了處理所有異常的一個策略。另外,使用項,你可指定一個自定義的異常處理方法,其將以適當(dāng)?shù)姆绞教幚懋惓!T谶@個例子中,自定義異常處理方法實現(xiàn)為一個名為AppMessageExceptionHandler的類,而在本文的后面部分,將會看到AppMessageExceptionHandler類具體的實現(xiàn)。屬性postHandlingAction指定了處理基于策略的異常的行為,此屬性可接受以下值:None、NotifyRethrow、ThrowNewException。