標籤:style blog color io 使用 ar div 代碼 log
在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)異常處理