首页 > 代码库 > Microsoft Enterprise Library 6.0 之 Exception 企业库异常处理

Microsoft Enterprise Library 6.0 之 Exception 企业库异常处理

对于企业库异常处理,这里做个简单的介绍和笔记。

环境

VS2012, .NET Framework 4.0, Microsoft Enterprise Library 6.0 

准备工作

1. 下载Enterprise Library配置编辑工具:Microsoft.Practices.EnterpriseLibrary.ConfigConsoleV6.vsix。

下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=38789

2. 通过 NuGet 添加所需要的企业库模块。

异常处理需要添加Microsoft Enterprise Library的ExceptionHandling,如果要写Log就需要添加ExceptionHandling.Logging 模块。

2.1 右键点击需要使用Exception模块的项目,选择Manage NuGet Packeages。或者选择Tools-> Library Package Manager -> Manage NuGet Packages for Solution。

2.2 在Manage NuGet Packeages窗口里面Online查找Enterprise Library,点击需要安装需要的模块。

技术分享

3. 安装成功后,所需要的DLL Reference会自动添加。

技术分享

 

如何使用

1. 右键App.config文件选择Edit configuration file v6配置App.config文件。

2. 添加如下图的配置。

FormatException的Post handle配置为None。FormatException将不会被处理。

FileNotFoundException的Post handle配置为ThrowNewException。FileNotFoundException将被包装为TimeoutException。

NullReferenceException的Post handle配置为NotifyRethrow,并且配置了写入log file. 

技术分享

3. 测试代码如下。已经做了注释,这里就不多讲了。

static void Main(string[] args){    TestException();}        private static void TestException(){    bool hasFormatException = false;    bool hasNullReferenceException = false;    bool hasFileNotFoundException = false;    bool hasTimeoutException = false;                //Enterprise Lib 5.0    //ExceptionManager em = EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>();    //Enterprise Lib 6.0    Logger.SetLogWriter(new LogWriterFactory().Create());    IConfigurationSource config = ConfigurationSourceFactory.Create();    ExceptionPolicyFactory factory = new ExceptionPolicyFactory(config);    ExceptionManager em = factory.CreateManager();    //FormatException异常捕获设置为None,将不会被抛出    try    {        em.Process(NotThrowException, "Policy");    }    catch (FormatException)    {        hasFormatException = true;        Console.WriteLine("捕获到FormatExceptio异常!");    }    if (hasFormatException == false)    {        Console.WriteLine("未捕获到FormatExceptio异常!");    }    //NullReferenceException异常捕获设置为NotifyThrow,将会被抛出    try    {        em.Process(NotifyThrowException, "Policy");    }    catch (NullReferenceException)    {        hasNullReferenceException = true;        Console.WriteLine("捕获到NullReferenceException异常!");    }    if (hasNullReferenceException == false)    {        Console.WriteLine("未捕获到NullReferenceException异常!");    }    //FileNotFoundException异常捕获设置为ThrowNewException,将会被抛出    try    {        em.Process(ThrowNewException, "Policy");    }    catch (FileNotFoundException)    {        hasFileNotFoundException = true;        Console.WriteLine("捕获到FileNotFoundException异常!");    }    catch (TimeoutException)    {        hasTimeoutException = true;        Console.WriteLine("捕获到TimeoutException异常!");    }    if (hasFileNotFoundException == false)    {        Console.WriteLine("未捕获到FileNotFoundException异常!");    }    if (hasTimeoutException == false)    {        Console.WriteLine("未捕获到TimeoutException异常!");    }    Console.ReadLine();}private static void NotThrowException(){    throw new FormatException();}private static void NotifyThrowException(){    throw new NullReferenceException();}private static void ThrowNewException(){    throw new FileNotFoundException();}

Microsoft Enterprise Library 6.0 之 Exception 企业库异常处理