https://www.codeproject.com/Articles/1080517/Aspect-Oriented-Programming-using-Interceptors-wit 기사 작성자는 "ASPNET Boilerplate"프레임 워크에서 인터셉터를 만드는 방법을 설명합니다. 필자는 Unit of Work
을 감싸는 인터셉터 (또는 두 개의 인터셉터, 하나는 시작에, 다른 하나는 끝)를 만들고 싶습니다. 어떤 AppService
에있는 메소드가 시작될 때 spStart
이라는 저장 프로 시저를 호출해야하며, 호출이 데이터베이스에 컴파일 될 때 spEnd
을 호출해야합니다. ABP의 Unit of Work
이 인터셉터도 있기 때문에, 이것은 내가 지금까지 한 일이다ABP 프레임 워크에서 인터셉터를 사용하여 작업 단위를 랩하는 방법
- 추가 된 두 개의 인터셉터 : 내가 위의 링크를 제공하는 문서의 단계에 따라, 나는 다음과 같은했다
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
. Unit of Work 인터셉터가 중간에 있고, 결과를 리턴하기 위해 인터셉트 된 비동기 메소드를 기다리는 로직을 사용할 것이라는 점을 고려할 때, 작업 단위를 랩 할 수있는 옵션을 제공해야합니다. 그러나 이것이 발생합니다. spStart
이 실행되면 모든 것이 정상입니다. 이 저장 프로시 저는 작업 단위 (UOW) 인터셉터보다 먼저 실행되기 때문에 문제가 없습니다. 그러나 spEnd
이 실행되면 "SQL 문을 실행하기 위해 연결을 사용하기 전에 트랜잭션을 처리해야합니다"또는 "작업 상태가 트랜잭션의 상태에 유효하지 않습니다"라고 표시됩니다 ... UoW가 내 저장 프로 시저. 다른 누구도 ABP와 동일한 문제가 있습니까? 어떻게 그걸 해결 했니?
그것은했다! 고맙습니다. – John