Skip to content

Жизненный цикл аспекта

Igor Polyakov edited this page Mar 8, 2018 · 2 revisions

Введение

Аспекты имеют специфичный жизненный цикл, обусловленный высокими требованиями к быстродействию библиотеки. Экземпляр класса аспекта создается единожды для каждого из декорированных методов при первом вызове метода. При последующих вызовах метода из кеша берется созданный экземпляр аспекта запрашиваемого типа. Сделано это из-за того, что операция получения атрибутов с типа или метода GetCustomAttributes<T> очень дорогая.

Этапы жизненного цикла

При вызове метода, декорированного аспектом, происходят следующие шаги

  1. Если аспект не был задействован раньше (в рамках текущего метода), то происходит инстанциирование экземпляра аспекта тем конструктором, который был задан на методе. Если аспект был задействован - происходит получение аспекта из кеша;
  2. Выполняется внедрение зависимостей, помеченных атрибутом [InjectDependecy];
  3. Вызывается метод IMethodAspect.Initialize().