我有一個查詢處理裝飾它記錄任何異常:如何記錄異常,並重新拋出的實際類型
public class QueryHandlerLogDecorator<TQuery, TResult> : IQueryHandler<TQuery, TResult>
where TQuery : IQuery<TResult>
{
private readonly IQueryHandler<TQuery, TResult> _handler;
private readonly ILog _log;
public QueryHandlerLogDecorator(IQueryHandler<TQuery, TResult> handler)
{
_handler = handler;
_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
}
public TResult Handle(TQuery query)
{
try
{
var result = _handler.Handle(query);
_log.Info("Ok");
return result;
}
catch (Exception ex)
{
_log.Error(ex.Message, ex);
throw new Exception(ex.Message);
}
}
}
雖然異常處理是不是世界上最糟糕的事情,它的意思是我失去了拋出異常的類型。
例如,如果我在應用程序中將ApplicationException
降低,則會捕獲並重新排列爲Exception
。
如何重新拋出被捕獲的異常作爲原始類型?
只是 「扔」;已經足夠... –
@CodeGray:以前的重複是一個更好的適合,因爲它完全問了同樣的問題。這個新的副本更廣泛。 –