2013-05-08 2 views
1

В наших приложениях имеются небольшие диапазоны для жизни. Было бы интересно иметь возможность перехватывать все службы, зарегистрированные в autofac. Поступая таким образом, мы можем точно определить, какой путь использует код для каждой сферы жизни и какие аргументы метода используются. На самом деле он не подходит для производства, но когда он действительно хорош для отладки/диагностики/рефакторинга, поскольку вы используете всю картину, а не только уровень единицы.Перехват ВСЕХ услуг

Но AFAIK зарегистрировать перехватчик можно только для каждой отдельной регистрации?

ответ

0

Ничего подобного не поддерживается из библиотеки Autofac.Extras.DynamicProxy2. Вы потенциально могли бы реализовать что-то вроде модуля, который обрабатывает OnActivating для каждого компонента, используя код, похожий на материал в Autofac.Extras.DynamicProxy2, но вы столкнетесь с проблемами, как ...

  • Вы хотите класс перехватчики или интерфейсные перехватчики? Тип разрешенного сервиса по сравнению с типом ограничения поддержки компонента влияет на динамический прокси-сервер, который вы хотите создать. Я считаю, что текущий код A.E.D2 генерирует только перехват для/или - не для каждого интерфейса, который реализует класс, и т. Д.
  • Вы используете клиентские прокси WCF? Клиентские прокси представляют собой интересный зверь, поэтому вы должны иметь специальный случай. Вы увидите это в A.E.D2.

Обычно такие проблемы, как это получить решаются аспектно-ориентированных программных решений (например, PostSharp) или профайлеров (например, ANTS) ... или комбинацию обоих. Возможно, вам захочется изучить эти решения, если у вас есть такая возможность.

Для примера, о какой реализации модуля я говорю, check out the log4net integration page on the Autofac wiki. Это показывает, как обрабатывать OnPreparing для каждого компонента в системе. Вы можете сделать то же самое, но вместо этого обработать OnActivating и use the sample on the Lifetime Events wiki page, чтобы показать вам, как поменять одну разрешенную вещь на другую (обмен реальным объектом для сгенерированного прокси-сервера).

Смежные вопросы