我有一个查询处理装饰它记录任何异常:如何记录异常,并重新抛出的实际类型
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:以前的重复是一个更好的适合,因为它完全问了同样的问题。这个新的副本更广泛。 –