Exception Handling引入MVP

異常處理(Exception Handling)是全部系統的最基本的基礎操做之一,其它的好比日誌(Logging)、審覈(Auditing)、緩存(Caching)、事務處理(Transaction)等;html

今天,來把異常處理引入到咱們在《MVP之V和P的交互》中Calculator的實例中,簡單的實現AOP。實例運行如圖:緩存

那麼,開始咱們開簡單的介紹下Enterprise Library EHABException 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;

  • 異常處理程序MessageBoxHandler
 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,咱們能夠專一於具體的業務邏輯上,相似異常之類的非業務處理能夠經過後期的配置來實現。

相關文章
相關標籤/搜索