Pergunta

Estou usando Castle DynamicProxy com Autofac.Tenho um objeto para o qual criei um proxy e tenho dois interceptores que atuam no proxy, um para registrar uma exceção e o segundo para alterar o valor de retorno do método.O código de registro é semelhante ao seguinte:

var builder = new ContainerBuilder();

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

Ao fornecer os argumentos nesta ordem, descubro que obtenho o resultado que desejo, ou seja, a exceção é registrada e o resultado é processado.Se eu inverter a ordem dos argumentos, o log não ocorre.

Minha pergunta então:registrados dessa forma, é garantido que os interceptores serão executados sempre na mesma ordem?Ou existe uma maneira melhor de garantir que o pedido será sempre o que pretendo?

FWIW, olhei para a interface IInterceptorSelector.Talvez esteja faltando alguma coisa - o que não é improvável - mas parecia que isso não era relevante neste caso.Mas ficaria feliz em ser corrigido se estiver errado.

Posso fornecer um exemplo de código mais longo, se necessário.

musicólogo

Foi útil?

Solução

Sim, os interceptores serão executados por padrão na ordem fornecida para cada método interceptado.

Como você observou corretamente, você pode substituí-lo por método usando IInterceptorSelector se necessário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top