-
Notifications
You must be signed in to change notification settings - Fork 0
Жизненный цикл аспекта
Igor Polyakov edited this page Mar 8, 2018
·
2 revisions
Аспекты имеют специфичный жизненный цикл, обусловленный высокими требованиями к быстродействию библиотеки. Экземпляр класса аспекта создается единожды для каждого из декорированных методов при первом вызове метода. При последующих вызовах метода из кеша берется созданный экземпляр аспекта запрашиваемого типа. Сделано это из-за того, что операция получения атрибутов с типа или метода GetCustomAttributes<T>
очень дорогая.
При вызове метода, декорированного аспектом, происходят следующие шаги
- Если аспект не был задействован раньше (в рамках текущего метода), то происходит инстанциирование экземпляра аспекта тем конструктором, который был задан на методе. Если аспект был задействован - происходит получение аспекта из кеша;
- Выполняется внедрение зависимостей, помеченных атрибутом
[InjectDependecy]
; - Вызывается метод
IMethodAspect.Initialize()
.