В нашем интеграционном проекте мы динамически делегируем серию конкретных объектов Processor, используя Reflection.
var genericType = typeof(IMessageProcessor<>).MakeGenericType(parseResponse.DomainMessage.GetType());
var miProcessMessage = genericType.GetMethod("ProcessMessage");
miProcessMessage.Invoke(processor, new object[] { parseResponse.DomainMessage });
Теперь, в определенных ситуациях, одному из процессоров нужно выдать определенное исключение, в этом случае, когда он не находит файл в ожидаемом месте.
throw new ResourceNotFoundException(string.Format("Could not find file {0}", filePath));
Наш процессор хочет проверить это исключение, чтобы определить, нужно ли повторить или прервать обработку (на основе механизма, основанного на времени, который здесь не актуален).
catch(ResourceNotFoundException ex)
{
// do stuff
}
Проблема заключается в том, что вызов, очевидно, «проглатывает» конкретное ResourceNotFoundException и сбрасывает System.Exception, говоря «Исключение было сгенерировано целью вызова».
Есть ли какой-нибудь способ сохранить тот факт, что с помощью Reflection фактически было выдано ResourceNotFoundException, а не исключение?