我找到了一种使用反射的方法(并且得到了它MethodInfo
)。如何TargetInvocationException
在引发异常的情况下调用它?
更新
我正在创建一个命令实现,其中命令由实现的类处理
public interface ICommandHandler<T> where T : class, ICommand
{
public void Invoke(T command);
}
由于有一个调度程序负责查找并将所有处理程序映射到正确的命令,因此我不能直接调用方法,而是使用反射。就像是:
var handlerType = tyepof(IHandlerOf<>).MakeGenericType(command.GetType());
var method = handlerType.GetMethod("Invoke", new [] { command.GetType() });
method.Invoke(theHandler, new object[]{command});
它工作正常,但我希望所有异常都传递给调用命令的代码。
以便调用者可以使用:
try
{
_dispatcher.Invoke(new CreateUser("Jonas", "Gauffin"));
}
catch (SomeSpecificException err)
{
//handle it.
}
而不是必须赶上TargetInvocationException
。
(我知道我可以抛出内部异常,但由于堆栈跟踪已被破坏,这毫无价值)
更新2
这是一个可能的解决方案..
但它似乎更像是一个黑客。没有更好的解决方案吗?也许是用表情之类的?