異常處理(Exception Handling)是全部系統的最基本的基礎操做之一,其它的好比日誌(Logging)、審覈(Auditing)、緩存(Caching)、事務處理(Transaction)等;html
今天,來把異常處理引入到咱們在《MVP之V和P的交互》中Calculator的實例中,簡單的實現AOP。實例運行如圖:緩存
那麼,開始咱們開簡單的介紹下Enterprise Library EHAB(Exception Handling Application Block)提供了一種基於策略(Policy)的異常處理方式。具體的能夠參考這裏。工具
如何配置post
具體的配置以下:ui
<configuration> <configSections> <section name="exceptionHandling" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" /> </configSections>
1 <exceptionHandling> 2 <exceptionPolicies> 3 <add name="UIExceptionPolicy"> 4 <exceptionTypes> 5 <add name="All Exceptions" type="System.Exception, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 6 postHandlingAction="None"> 7 <exceptionHandlers> 8 <add type="Handwe.Demo.UnityInMVP.MessageBoxHandler, Handwe.Demo.UnityInMVP" 9 name="Custome Handler" /> 10 </exceptionHandlers> 11 </add> 12 </exceptionTypes> 13 </add> 14 </exceptionPolicies> 15 </exceptionHandling>
這些是能夠經過配置工具來配置的;如今咱們來講說具體的內容:this
<exceptionPolicies> <add name="UIExceptionPolicy">
添加一個名爲UIExceptionPolicy的異常策略;spa
1 <add name="All Exceptions" type="System.Exception, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 2 postHandlingAction="None">
配置要處理的異常類型,這裏是全部異常;postHandlingAction="None"是無後續處理;日誌
1 <exceptionHandlers> 2 <add type="Handwe.Demo.UnityInMVP.MessageBoxHandler, Handwe.Demo.UnityInMVP" 3 name="Custome Handler" />
exceptionHandlers添加的是一個咱們自定義的處理程序,名爲MessageBoxHandler,就是簡單的一個彈出式消息框;code
代碼的實現htm
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling;
using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration;
1 namespace Handwe.Demo.UnityInMVP 2 { 3 [ConfigurationElementType(typeof(CustomHandlerData))] 4 public class MessageBoxHandler : IExceptionHandler 5 { 6 public MessageBoxHandler(NameValueCollection igonre) 7 { 8 9 } 10 public Exception HandleException(Exception exception, Guid handlingInstanceId) 11 { 12 MessageBox.Show(exception.Message, "Application Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 13 return exception; 14 } 15 } 16 }
這裏很簡單也沒有用到相應的參數配置;
try { this.OnCalculating(op1, op2); } catch (Exception ex) { if (ExceptionPolicy.HandleException(ex, "UIExceptionPolicy")) { throw; } }
修改並應用以上代碼;指定異常處理策略;
小結
經過Entlib的EHAB,咱們能夠專一於具體的業務邏輯上,相似異常之類的非業務處理能夠經過後期的配置來實現。