0

メソッドが戻った場所に関するランタイム情報を取得することは可能ですか?

つまり、コードのすべての行を実行した後にメソッドが返された場合、または何らかの条件のために発生した以前の return ステートメントのために返された場合です。

このシナリオでは、メソッド スコープに存在する必要がある UnitOfWork を作成するためにインターセプターを使用しています。たとえば、次のコードを考えてみましょう。

[UnitOfWork]
public void Foo()
{
    // insert some values to the database, using repositories interfaces...
    DoSomeChangesInTheDataBaseUsingRepositories();
    var result = DoSomethingElse();
    if (!result) return;

    DoMoreLogicBecuseTheResultWasTrue();            
}

[UnitOfWork] でフラグが立てられたメソッドのスレッド静的作業単位を開くインターセプター クラスがあり、メソッドのスコープが終了すると、UoW でコミットを実行して破棄します。

これは問題ありませんが、上記のシナリオを考えてみましょう。何らかの理由でプログラマーが何らかの条件によりメソッドの途中で戻ることを決定した場合、そのシナリオでは、リポジトリによって行われた変更を永続化するべきではありません。

これはメソッドの設計が間違っていることを示している可能性があることはわかっていますが、プログラマーによって記述される可能性のあるシナリオであり、この種のシナリオからデータベースを保護したいと考えています。

また、メソッドが終了した場所を教えてくれるコードをメソッド自体に追加したくありません。メソッド情報によって、何らかの形でその返されたポイントを推測したいのですが、それがスコープの最後にない場合、インターセプターはコミットしないことを認識します。

4

4 に答える 4