Есть ли способ перехватить вызов метода класса, чтобы вы могли сделать АОП?Как перехватить вызов метода класса
например.
Я хочу Teacher.Talk() выполняет по-разному в двух сценариях:
class School
{
[Fun]
public void Picnic {
Teacher t = new Teacher();
t.Talk();
}
public void Seminar{
Teacher t = new Teacher();
t.Talk();
}
}
В коде выше, функция Пикник украшена Fun атрибутом, поэтому функция разговора учителя гораздо интереснее, чем один в функции Семинара, который не украшен атрибутом.
Я проверил Castle.DynamicProxy, но он использует прокси-класс и нуждается в некоторой модификации кода. Это не помогает решить мою проблему, потому что я хочу использовать этот атрибут для настройки, так что, когда решение изменится, потребуется очень мало модификаций кода.
Большое спасибо!
Спасибо, но подклассификация обеспечивает решение моей проблемы. Мне нужно настроить поведение объекта в области действия, а не в области времени. – Roy
Он обеспечивает только часть решения. Вам нужно будет: 1) Используйте TeacherFactory, чтобы скрыть тот факт, что вы можете отправлять обратно прокси. 2) В прокси-сервере вам нужно будет запустить стек вызовов и проверить методы в стеке для таких атрибутов, как FunAttribute, которые вас интересуют. 0) Молитесь, чтобы ваш метод Teacher.Talk не назывался 1 миллион раз в где-то внутри. ;-) – SargeATM