I want to catch the exceptions that are thrown in methods called with invoke method.
public void TestMethod()
{
try
{
method.Invoke(commandHandler, new[] { newCommand });
}
catch(Exception e)
{
ExceptionService.SendException(e);
}
}
method.Invoke calls the following method:
public void Register(/*parameters*/)
{
if(test_condition())
throw new CustomException("Exception Message");
}
The problem is that when I catch the CustomException, in the TestMethod, the e variable on the catch statement has NOT the type CustomException. It has the following message: "Exception has been thrown by the target of an invocation".
I want to catch the exception that has been raised (which is CustomException), and pass it to the ExceptionService mechanism.
What am I doing wrong?
Yes, you're calling the method via reflection. So as per the documentation, a TargetInvocationException
will be thrown if the target method throws an exception.
Just use the InnerException
property to obtain - and potentially throw - the original exception.
So for example:
try
{
method.Invoke(commandHandler, new[] { newCommand });
}
catch (TargetInvocationException e)
{
ExceptionService.SendException(e.InnerException);
}
See more on this question at Stackoverflow