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,咱们能够专一于具体的业务逻辑上,相似异常之类的非业务处理能够经过后期的配置来实现。

相关文章
相关标签/搜索