Вопрос

Я использую 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 если нужно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top