, чтобы начать ваш try catch, излишне. первый улов обработает GatewayConnectionFailedException
, остальные уловы никогда не будут иметь тип GatewayConnectionFailedException
, поскольку они были обработаны первым уловом. поэтому код можно упростить до
try
{
something();
}
catch (GatewayConnectionFailedException)
{
throw;
}
catch (GatewayException e)
{
_logger.Error(e.Message, e);
}
Теперь, как пользовательский интерфейс будет обрабатывать это, зависит от того, как вы обрабатываете исключение. если вы просто сгенерируете исключение, то вам также понадобится попытка перехвата на уровне представления. Однако, если тип возвращаемого значения этого слоя возвратил объект как
class Result<T>
{
T Value {get;set;}
Exception Error {get;set;}
}
Тогда вы можете просто обработать тип без необходимости try / catch на уровне представления.
Также стоит отметить, что вы ловите и почему вы пытаетесь поймать это. как правило, вы не хотите перехватывать Exception
, кроме как на прикладном уровне, где вы регистрируете ошибку и терпите неудачу. Исключения должны быть исключительными, и поэтому возможны только те исключения, которые вы ожидаете, и причины их возникновения. в противном случае пусть они всплывают.