문제

AutoFac을 사용하여 Castle DynamicProxy를 사용하고 있습니다. 필자는 프록시를 만들었던 객체가 있으며, 프록시에 동작하는 두 개의 인터셉터가 있으며, 예외를 기록하고 메소드의 리턴 값을 변경하기 위해 두 번째로 둘러싸여 있습니다. 등록 코드는 다음과 같습니다.

var builder = new ContainerBuilder();

builder.Register(c => c.Resolve<ProxyGenerator>()
    .CreateClassProxy<Foo>(
        c.Resolve<ResultProcessorInterceptor>(),
        c.Resolve<ExceptionLoggingInterceptor>()))
    .As<Foo>();
.

이 순서로 인수를 제공함으로써, 제가 원하는 결과를 얻는 것을 알게되고, 즉 예외가 기록되고 결과가 처리됩니다. 인수의 순서를 반전하면 로깅이 발생하지 않습니다.

내 질문, 다음과 같은 방식으로 등록 된 인터셉터가 매번 동일한 순서로 실행되도록 보장됩니까? 아니면 주문이 매번 의도하는 일이 될 수있는 더 좋은 방법이 있습니까?

fwiw, iInterceptorselector 인터페이스를 보았습니다. 아마도 나는 무언가를 놓치지 않을 것입니다. 그것은 거의 없지만이 경우에는 관련이없는 것처럼 보였습니다. 하지만 내가 틀렸다면 해결해 주셔서 감사합니다.

필요한 경우 더 긴 코드 샘플을 제공 할 수 있습니다.

musicologyman

도움이 되었습니까?

해결책

예, 인터셉터는 기본적으로 모든 도중 된 방법에 대해 제공된 순서로 실행됩니다.

올바르게 언급했듯이, 필요한 경우 IInterceptorSelector를 사용하여 메소드별로 대체 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top