リフレクションを使用する方法を見つけました(そしてそれを手に入れましたMethodInfo
)。TargetInvocationException
例外がスローされたときに取得せずに呼び出すにはどうすればよいですか?
アップデート
コマンドを実装するクラスによってコマンドが処理されるコマンド実装を作成しています
public interface ICommandHandler<T> where T : class, ICommand
{
public void Invoke(T command);
}
すべてのハンドラーの検索とマップを処理するディスパッチャーが1つあるため、メソッドを直接呼び出すことはできませんが、リフレクションを使用します。何かのようなもの:
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
。
(私は内部例外をスローできることを知っていますが、スタックトレースが破棄されるため、それはかなり価値がありません)
Update2
これが可能な解決策です。
しかし、それはハックのようです。より良い解決策はありませんか?多分表現か何かで?