Autofac + Castle DynamicProxy:Заказ перехватчиков
-
14-12-2019 - |
Вопрос
Я использую Castle DynamicProxy с Autofac.У меня есть объект, для которого я создал прокси, и два перехватчика, которые действуют на прокси: один для регистрации исключения, а второй для изменения возвращаемого значения метода.Регистрационный код выглядит следующим образом:
var builder = new ContainerBuilder();
builder.Register(c => c.Resolve<ProxyGenerator>()
.CreateClassProxy<Foo>(
c.Resolve<ResultProcessorInterceptor>(),
c.Resolve<ExceptionLoggingInterceptor>()))
.As<Foo>();
Предоставляя аргументы в этом порядке, я получаю желаемый результат, т. е. исключение регистрируется и результат обрабатывается.Если я изменю порядок аргументов, регистрация не произойдет.
Тогда мой вопрос:зарегистрированные таким образом, гарантированно ли каждый раз перехватчики будут выполняться в одном и том же порядке?Или есть лучший способ гарантировать, что каждый раз порядок будет таким, как я хочу?
Кстати, я посмотрел на интерфейс IInterceptorSelector.Возможно, я что-то упускаю (что вполне вероятно), но, похоже, в данном случае это не имело значения.Но буду рад, если меня поправят, если я ошибаюсь.
При необходимости могу предоставить более длинный пример кода.
музыковед
Решение
Да, перехватчики по умолчанию будут выполняться в указанном порядке для каждого перехваченного метода.
Как вы правильно заметили, вы можете переопределить его для каждого метода, используя IInterceptorSelector
если нужно.