Я хочу быть уведомленным каждый раз, когда определенный метод назвали. Я надеялся, что мог выполнить это Отражение использования, но мои попытки не получили меня нигде. Как я могу быть уведомлен?
Я изобразил использование MethodInfo
путь состоял в том, чтобы пойти, но как я сказал, я не нашел ничего там, которое могло помочь мне выполнить то, что я хотел сделать.
Я не могу изменить метод или украсить его атрибутами или чем-либо. Если бы я мог бы сделать что-то как этот, я не должен был бы делать этого, я мог просто изменить сам метод.
Отражение - половина решения. Вам необходимо обернуть наблюдаемые объекты, чтобы перехватить вызовы методов. Обычно это делается с помощью удаленных прокси-объектов.
В Enterprise Library есть блок Unity Interception, который делает именно то, что вы хотите. Также вы можете изучить DynamicProxy фреймворка Castle, который дает вам чрезвычайно полный контроль над этим процессом перехвата.
Поиск в Google по аспектно-ориентированному программированию даст вам больше информации.
Я считаю, что единственный способ сделать это - либо переписать тело метода так, чтобы он уведомлял вас, когда метод был вызван, либо использовать API профилирования CLR.
Первый способ может быть реализован с помощью фреймворка АОП. Вы можете использовать Postsharp (который был превращен в коммерческий продукт) для достижения этого с помощью OnMethodBoundaryAspect. Вот пример: Наследуйте класс от OnMethodBoundaryAspect
вы можете использовать методы расширения
, чтобы вы могли использовать разные атрибуты и изменять все до или после фактического метода
Рассматривали ли вы АОП (аспектно-ориентированное программирование)? Что-то вроде PostSharp .