在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