添加引用:

获取Facade类

ExceptionManager ExManager = EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>();

EnterpriseLibraryContainer位于Microsoft.Practices.EnterpriseLibrary.Common.Configuration;需要using下.

错误处理样板代码:

//==================

try{

.....你的操作,可能会抛出错误

}catch(Exception ex){

if (ExManager.HandleException(ex, "错误处理策略名称")) throw;

}

//===============

"错误处理策略名称",指你在错误处理模块配置指定的名称。

也可以使用 return ExceptionManager.Process(()=>MyMethod(18,"sss",...)) 进行调用

下面是Process的实现代码,跟上面的样板代码一样

代码

/// <summary>
/// Executes the supplied delegate <paramref name="action"/>, and handles
/// any thrown exception according to the rules configured for <paramref name="policyName"/>.
/// </summary>
/// <typeparam name="TResult">Type of return value from <paramref name="action"/>.</typeparam>
/// <param name="action">The delegate to execute.</param>
/// <param name="defaultResult">The value to return if an exception is thrown and the
/// exception policy swallows it instead of rethrowing.</param>
/// <param name="policyName">The name of the policy to handle.</param>
/// <returns>If no exception occurs, returns the result from executing <paramref name="action"/>. If
/// an exception occurs and the policy does not re-throw, returns <paramref name="defaultResult"/>.</returns>
public override TResult Process<TResult>(Func<TResult> action, TResult defaultResult, string policyName)
{
if(action == null) throw new ArgumentNullException("action");
if(policyName == null) throw new ArgumentNullException("policyName");

try
{
return action();
}
catch (Exception e)
{
if(HandleException(e, policyName))
{
throw;
}
}
return defaultResult;
}

如果你电脑上有多个Ent Lib相关程序集(Release,Src,Hands On labs)请注意程序集的引用,默认情况下强类型程序集(PublicKeyToken!=null)是不允许引用未签名的程序集的,下面是可能的错误提示。

//===============引用错误===============

创建 exceptionHandling 的配置节处理程序时出错: 未能加载文件或程序集“Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

//=================

为避免这个问题请在程序中引用跟配置工具(EntLibConfig.exe)同目录的程序集

参考下图可知道,一个Policy,会捕获一组错误,而每个错误,多允许配置多个处理者(Handler)

这个处理者的动作包括替换,包装,记录等处理。

每个错误类型可以设置Post Handling action, 分别取None,NotifyRethrow,thorwNewExcetpion等三个枚举

指定的错误被捕获,HandleException会根据配置逐一执行Handle,接着就根据Post Handling action设置进行相应处理

这个设置需要配合上面的样板代码来实现功能,列举如下:

None:HandleException返回false,不会执行throw;故错误将就此“消失”

NotifyRethrow:HandleException返回true,throw将被执行,原始错误被抛出。

throwNewExcetpion:HandleException返回true,throw将被执行,但是错误类型被替换成Wrap Handler或ReplaceHandler指定的类型,错误抛出点(Stack trace)将会出现在Handle内部(企业库),当然Wrap Handler会将原始错误封装在innerException中。

注意throw;跟throw ex;是不同的 throw ex将会将原始错误发生点改成当前throw ex的位置。

转载于:https://www.cnblogs.com/wdfrog/archive/2010/11/05/1870083.html

Exception Handling Application Block (5)详细解相关推荐

  1. 黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block

    黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block 原文:黄聪:Microsoft Ent ...

  2. EntLib 3.1学习笔记(5) : Exception Handling Application Block

    [en] http://msdn2.microsoft.com/en-us/library/aa480461.aspx [ch] http://www.microsoft.com/china/MSDN ...

  3. Composite UI Application Block (CAB) 详解

    微软开发了一套开源的企业库 (Enterprise Library),通过使用这套企业库里面提供的各种应用程序块可以极大的提高应用程序的开发效率和缩短开发周期,也由此得到了大家的广泛应用. 企业库包括 ...

  4. Enterprise Library深入解析与灵活应用(3):倘若将Unity、PIAB、Exception Handling引入MVP模式.. .. .....

    最近在做一个Smart Client Software Factory的项目.熟悉SCSF或者CAB的都应该很清楚MVP这种设计模式.MVP是MVC的一种变体,View和Mode分别关注于UI的呈现和 ...

  5. 1,Composite UI Application Block (CAB) 介绍

    微软开发了一套开源的企业库 (Enterprise Library),通过使用这套企业库里面提供的各种应用程序块可以极大的提高应用程序的开发效率和缩短开发周期,也由此得到了大家的广泛应用. 企业库包括 ...

  6. Enterprise Library Policy Injection Application Block 之一: PIAB Overview

    在过去的半年里,定期或者不定期地写点东西已经成为了我的一种习惯.可是最近两个月来一直忙于工作的事情一直足够的时间留给自己,虽然给自己列了很长一串写作计划,可是心有余而力不足.这一段工作主要是帮助公司开 ...

  7. Microsoft Updater Application Block 1.2.1 核心设计(core design) [翻译]

    Microsoft Updater Application Block 核心设计(core design) 译者:Tony Qu Updater Application Block由一个核心应用程序升 ...

  8. 异常处理与MiniDump详解(3) SEH(Structured Exception Handling)

    write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 一.   综述 SEH--Structured Exception Handlin ...

  9. 黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block

    代理对象(Proxy Object)会通过Handler链定位到真实对象(Real Object),而Policy则被注入到代理对象和真实对象中.整个流程如图: 我个人对Policy Injectio ...

最新文章

  1. Mysql,再见吧!select * !
  2. php mysql 查询 where_PHP MySQL Where 子句
  3. NTFS 分区表修复新法(AcronisDiskDirector10)
  4. 关系数据库概念辨析❤️
  5. Ubuntu下安装arm-linux-gcc-4.4.3.tar.gz (交叉编译环境)
  6. 记录各种体育活动(持续更新到不更新为止)
  7. Android 测试支持库 1.0 现已发布!
  8. 纽约时报:昔日王者Digg能否实现中兴?【独家】
  9. Python实现爬取豆瓣电影|python豆瓣全栈爬虫:电影系列全爬虫系统1.0:(信息,短评,影评,海报)|你想爬的都有
  10. vc2005运行库彻底卸载_VC运行库安装卸载工具-Visual C ++ AIO(VC运行库安装卸载工具)下载 v2019.05.21官方版--pc6下载站...
  11. SiteMesh详解
  12. Python:输入概率,计算信源熵
  13. 谈谈坚持写博客的感悟
  14. 完整版28K易支付系统源码+第四方Oreo支付源码
  15. 云服务器内存占用多少,腾讯云云服务器CPU或内存占用过高怎么办?
  16. Echoprint系列--编译
  17. vc++datamatrix二维码识别
  18. 基于SSM纺织品公司订单管理系统
  19. 工程部署(三):低算力平台模型性能的优化
  20. 如何快速成为谷歌web Store开发者(不用办visa/信用卡)

热门文章

  1. oracle 119(11.2.0.4),ORACLE 从 11.2.0.1 升级到 11.2.0.4 版本之ORA-00119问题处理纪实
  2. c++ qt获取电脑的内存_QT开发(十四)——QT绘图系统
  3. 用计算机模拟病毒,计算机模拟揭露HIV病毒体内传播细节,有望为治疗提供新途径...
  4. android 放大镜动画,Android在图片上进行放大镜效果(放大镜形状)
  5. Golang 【大字符串相加,求和】
  6. Grafana WebHook 报警通知踩坑系列,支持报警截图发钉钉卡片报警!!!
  7. angular将html导出为pdf,如何使用Angular进行转换:将HTML转换为PDF
  8. 笔记本html连接电视机黑屏是怎么回事,电脑连接电视黑屏是怎么回事
  9. mysql5.7.11源码安装,mysql 5.7.11 源码安装
  10. python RandomTrees特征编码