アーティクルhttps://www.codeproject.com/Articles/1080517/Aspect-Oriented-Programming-using-Interceptors-witの著者は、 "ASPNETボイラープレート"フレームワークでインターセプタを作成する方法について説明しています。私の場合は、Unit of Work
をラップするインターセプタ(または2つのインターセプタ、開始用と終了用のインターセプタ)を作成したいと考えています。 AppService
のメソッドが起動すると、spStart
というストアドプロシージャを呼び出し、呼び出しがデータベースにコミットされたときにspEnd
を呼び出す必要があります。 ABPでUnit of Work
も迎撃であるので、これは私がこれまで何をやったかである:私は上記のリンクを提供する資料の手順に従い 、私は次のようでした:ABPフレームワークのインターセプタを使用して作業ユニットをラップする方法
- は2つのインターセプタを追加しました:
StartInterceptor
をし、EndInterceptor
とのRegistrar
クラス 私は、次のコードを追加
- が
ApplicationModule
クラスApplicationModule
でも でそれらを登録:
を
IocManager.IocContainer.Register(Component.For<IApplicationService>() .Interceptors(InterceptorReference.ForType<StartInterceptor>()).First, Component.For<StartInterceptor>() .Interceptors(InterceptorReference.ForType<EndInterceptor>()).Last, Component.For<StopInterceptor>());
このコードは、最初StartInterceptor
の実行をしなければならない、と最後に実行EndInterceptor
。単位作業インターセプタが中間にあり、結果を返すためにインターセプトされた非同期メソッドを待つロジックを使用することを考慮すると、作業ユニットをラップするオプションが与えられるはずです。しかし、これが起こるのは:spStart
が実行されているとき、すべてがOKです。このストアドプロシージャは、Unit of Workインターセプタの前で実行されるため、問題はありません。しかし、spEnd
が実行されているときは、「接続を使用してSQL文を実行する前にトランザクションを処理する」または「操作がトランザクションの状態に対して有効でない」と表示されます... UoWが私のストアドプロシージャ。他の誰かがABPと同じ問題を抱えていますか?どのように解決しましたか?
それは働きました!ありがとうございました。 – John