Catel帮助手册-Catel.Core:(5)异常处理

 

在Catel中使用异常处理时,创建一个异常处理策略和执行代码是安全的,不需要人工检查所有的异常类型,Catel通过IExceptionService方法来处理这个技术。

 

1,设置IExceptionService

     注册一个异常到服务中让Calte知道他如何被获取,是很重要的,服务会处理加入到IExceptionService中的异常。

     下面是注册一些异常以及他们如何被获取的例子,当FileNotFoundException异常发送时,它会给用户显示消息,对于其他的异常,他将会记录异常然后显示一个消息给用户,让其去联系开发者。

var dependencyResolver = this.GetDependencyResolver();
var exceptionService = dependencyResolver .Resolve<IExceptionService>();

exceptionService.Register<FileNotFoundException>(exception => dependencyResolver.Resolve<IMessageService>().Show(exception.Message));
exceptionService.Register<Exception>(exception =>
{
    Log.Error(exception);
    dependencyResolver.Resolve<IMessageService>().Show("An unknown exception occurred, please contact the developers");
});

 

注意:IExceptionService会检查类型层次,例如,当一个异常类型作为类型异常注册了,会处理所有同类型的异常。

2,使用IExceptionService来执行代码

进程方法跟踪所有注册的异常,当他们发生的时候来处理他们,如果你注册的异常时抛出代码,Process方法将将作为处理动作执行它(例如,显示一个对话框),Process方法可以用两种方式实现,作为动作或者作为函数。

2.1作为动作执行

 

var dependencyResolver = this.GetDependencyResolver();
var exceptionService = dependencyResolver.Resolve<IExceptionService>();
exceptionService.Process(() => { throw new ArgumentOutOfRangeException(); });

2.2 作为函数执行

var dependencyResolver = this.GetDependencyResolver();
var exceptionService = dependencyResolver.Resolve<IExceptionService>();
var result = exceptionService.Process<int>(() => 1 + 1);

3,决定异常类型是否注册执行

     如果你需要知道异常类型是否已经注册到了IExceptionSerivce中,你可以使用IsExceptionRegIsteredmethod方法来确定。

var dependencyResolver = this.GetDependencyResolver();
var exceptionService = dependencyResolver.Resolve<IExceptionService>();
if (exceptionService.IsExceptionRegistered<ArgumentNullException>())

{
//Do something
}

4,获取一个特定的异常

如果你需要获取某个注册的异常类型的实现,你需要通过GetHandler方法来获取

var dependencyResolver = this.GetDependencyResolver();
var exceptionService = dependencyResolver.Resolve<IExceptionService>();
var exceptionHandler = exceptionService.GetHandler<ArgumentException>();

 

 

时间: 2024-11-23 09:13:26

Catel帮助手册-Catel.Core:(5)异常处理的相关文章

Catel帮助手册-Catel.Core(6):日志管理

1,简介      从2.2版本开始,Catel使用了一个自定义的日志系统,这种方式,针对log4net的引用可以被移除,做这个修改主要是为了不强迫用户使用log4net,同时,log4net看起来很长时间不更新了,其他的日志系统如NLog看起来在增长,新的日志系统将允许许多基础的日志,这样,日志将将非常简单,并且如果他需要,真正的日志将被用户执行. 1.1 Log和ILog      所有的日志将通过ILog接口.这个接口被自动的注册到Catel中的所有对象上作为Log字段,ILog接口仅仅有

Catel帮助手册-Catel.Core:(5)依赖注入(ServiceLocator and TypeFactory)

1,简介 在Catel2.0之前,IOC容器内部使用的是Unity,然而,这就强制所有的用户在他的应用程序中使用Unity作为IOC容器,也需要这样划分库,从2.0以后,一个不同的技术被使用了,这个允许开发者可以使用他们自己悬着的IOC容器技术. 1.1在Ioc中不同的组件 在Catel中有许多不同的组件他们对于Ioc是非常重要的. ServiceLocator 该组件用于注册所有的类型,这个事真正的Ioc容器 TypeFactory 用于创建类型的组件,使用IServiceLocator来获取

Catel帮助手册-Catel.Core:(4)数据处理

1,概要      文档的这个部分都是关于Catel中数据处理方法的,一些部分是基于CodeProject上的文章的,但这个文档有更多的更新内容.     一件很重要的事情是许多开发者花费很多时间来处理对象的序列化,序列化是一个专业领域的知识,只有技术比较高深的人员才能很好地掌握对象的序列化处理(要考虑程序集的改变,类的改变(属性的增加和移除),大部分开发者认为序列化只是执行如下的操作代码创建一个BinaryFormattter对象: var serializer = new BinaryFor

Catel帮助手册-Catel.Core:(2)缓存处理

      缓存是用于提供应用程序执行效率的,应用程序大部分的花费都用于数据的获取,这些处理主要移动到网络上或者存储到硬盘中,但是某些数据不太会改变,并不需要每次都同步.     因此,为了提高应用程序的执行效率,找到一个很好的方法来处理这些不太改变的数据库,Catel使用了一个 CatchStorage<TKey,TValue>的类,注意,第一个泛型的参数表示的是关键字的类型,第二个泛型的参数是要存储的值的类型,就像Dictonary<Tkey,TValue>.但是CatcheS

Catel帮助手册-Catel.Core:(1)参数检查

  我们检查方法是否正确,一般是返回对错,或者是是否抛出一个异常,大部分人不检查异常的正确性,那么这种错误在很深的堆栈中,很难查看. Catel与一般的检查方法不同,一般是使用   public void CheckForException(object obj) { if (obj == null) { throw new ArgumentNullException("obj"); } }   然而,Catel会记录所有的行为,因此开始的检查方式如下: public void Che

Catel帮助手册-Catel.Core:(3)配置说明

      Catel可以让你更方便的配置所有的平台 下面的表格解释了每个平台使用何种技术来获取和存储配置值. 平台 技术 .NET ConfigurationManager.AppSettings Sliverlight IsolatedStorageSettings.ApplicationSettings WinRT ApplicationData.Current.LocalSettings PCL 不支持   1 从配置中获取值    使用如下代码从配置中获取值: var configur

asp.net core 自定义异常处理中间件

原文:asp.net core 自定义异常处理中间件 asp.net core 自定义异常处理中间件 Intro 在 asp.net core 中全局异常处理,有时候可能不能满足我们的需要,可能就需要自己自定义一个中间件处理了,最近遇到一个问题,有一些异常,不希望记录错误日志,目前主要是用户请求取消导致的 TaskCanceledException 和 OperationCanceledException 异常.因为我的 ERROR 级别的日志会输出到 Sentry,sentry的异常会自动发邮

Java异常处理的10个最佳实践

本文作者: ImportNew - 挖坑的张师傅 未经许可,禁止转载! 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可用.非法的输入.null 输入等等.Java 提供很多异常处理特性,通过内置的 try.catch.finally关键字实现.Java 同样允许创建新的异常和使用 throw 和 throws 抛出该异常.在实践中,异常处理不单单是知道语法这么简单.编写健壮的代码更像是一种艺术,而不是一门科学,在接

php 魔术方法总结(持续更新)

类中的魔术方法 PHP 魔术方法指的是在某些时刻会自动被调用的内置函数,它们以两个连续的下划线开头. 类中的魔术方法 __construct() 类的构造函数,用于初始化对象,在对象实例化时自动运行 __destruct() 析构函数,用于在 php 运行终止时,释放对象所占用的内存.析构函数是 php 的垃圾回收机制,使用栈结构,后进先出. 构造函数和析构函数的例子 class computer{     private $brand;     function __construct($br