首页 > 代码库 > Catel帮助手册-Catel.Core:(5)异常处理

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>();

 

 

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