Autofac + Castle DynamicProxy: Порядок перехватчиков - PullRequest
3 голосов
/ 15 марта 2012

Я использую Castle DynamicProxy с Autofac.У меня есть объект, для которого я создал прокси, и у меня есть два перехватчика, которые воздействуют на прокси, один для регистрации исключения, а второй для изменения возвращаемого значения метода.Регистрационный код выглядит следующим образом:

var builder = new ContainerBuilder();

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

Предоставляя аргументы в этом порядке, я обнаруживаю, что получаю желаемый результат, т. Е. Исключение регистрируется и результат обрабатывается.Если я переверну порядок аргументов, регистрация не произойдет.

Тогда мой вопрос: зарегистрированы ли таким образом, гарантированно ли каждый раз перехватчики выполняются в одном и том же порядке?Или есть лучший способ убедиться, что порядок будет соответствовать тому, что я собираюсь делать каждый раз?

FWIW, я посмотрел на интерфейс IInterceptorSelector.Возможно, я что-то упускаю - что не исключено - но это выглядело как неуместное в этом случае.Но я был бы счастлив, если меня поправят.

При необходимости я могу предоставить более длинный пример кода.

музыковед

1 Ответ

3 голосов
/ 01 июля 2012

Да, перехватчики по умолчанию будут выполняться в указанном порядке для каждого перехваченного метода.

Как вы правильно заметили, вы можете переопределить его для каждого метода, используя IInterceptorSelector при необходимости.

...