Exception Handling Application Block设计用来完成企业级应用程序各层中异常处理。
***
Exception Handling Application Block依赖项
Enterprise Library中的所有Application Blocks设计用于相互联合使用。有时,有些Application Blocks依赖于其他Enterprise Library中Application Blocks和代码。Exception Handling Application Block有如下依赖项:
l Enterprise Library Configuration Application Block - Exception Handling Application Block使用该CAB读取配置信息。
l Common library functionality,如instrumentation - 该类库为暴露事件和系统管理数据提供了不同的功能。
Application Block包括用来记录异常信息的异常处理程序(Exception Handler),使用Logging异常处理程序需要Logging and Instrumentation Application Block,下面的类库关系图清楚显示这一点。
缺省情况下,Application Block使用XML文件存放配置信息,推荐使用Configuration Console配置工具来编辑配置文件。
Exception Handling Application Block设计
Exception Handling Application Block设计达到如下目标:
l 将执行大部分通用异常处理任务的逻辑封装为最小的应用程序代码。
l 减轻开发人员为通用异常处理任务编写重复代码和定制代码。
l 允许在异常处理policies部署后也可改变,并且确保改变的同时性和一致性。
l 包含异常处理的最佳实践。
下图显示了Exception Handling Application Block中主要类之间的交互关系:
其中Configuration Application Block和Logging Application Block是Enterprise Library提供的另外2个Application Blocks,分别用来读取配置信息和记录异常日志。
Client端调用ExceptionPolicy.HandleException方法,并传入Exception Policy名称。每一个Exception Policy下设定一个或多个不同的Exception Types,每一个Exception Type又包含一个或多个Exception Handlers。
Wrap Handler、Logging Handler、Replace Handler和定制Handler都是异常处理程序(Exception Handler),这些Exception Handlers都实现IExceptionHandler接口或继承ExceptionHandler抽象类。
Handler总是以配置的顺序执行,每一个Handler都会对Exception执行一些操作(如包装,替换等等),并将当前的Exception沿着Handler链传递到下一个Handler。
一旦配置的Handler执行后,就产生对应的post-handling动作,该动作有如下选项:
- None - 没有重抛异常的动作。
- NotifyRethrow - 告诉调用程序:Policy推荐应该重抛异常。
- ThrowNewException - 在所有的Handler执行后,向调用程序抛出最终异常(并不一定是原始的异常)。
如下是简单的示例代码:











你可以通过Configuration Console配置工具来完成配置文件的定义,首先添加Exception Handling Application Block到配置文件中。然后需要定义Exception Policy,每一个Exception Policy包含一个或多个Exception Types(如System.ArgumentException),并且每一个Exception Type又包含一个或多个Exception Handlers。
另外,Application Block提供了2个Formatters,用来记录或显示详细异常信息:TextExceptionFormatter和XmlExceptionFormatter。Formatter使用反射机制遍历所有Exception成员,并以Text或XML形式输出,这与当前的Exception Management Application Block(注:Microsoft以前提供的异常处理程序块)处理方式比较相似。
你也可以通过实现ExceptionHandler抽象类,来创建定制的Handler。
public abstract class ExceptionHandler : ConfigurationProvider, IExceptionHandler
该抽象类继承ConfigurationProvider类,并实现IExceptionHandler接口。ConfigurationProvider抽象类实现了IConfigurationProvider接口,用来读取配置数据。
public abstract class ConfigurationProvider : IConfigurationProvider
在Enterprise Library提供的Quick start for Exception Handling Application Block中,提供了定制Handler的实现:




































