Получать уведомления о вызовах методов в .NET - PullRequest
5 голосов
/ 03 июня 2010

Я хочу получать уведомления всякий раз, когда вызывается определенный метод. Я надеялся, что смогу добиться этого с помощью Reflection, но мои попытки никуда меня не привели. Как я могу получить уведомление?

Я подумал, что использовать MethodInfo - это путь, но, как я уже сказал, я не нашел там ничего, что могло бы помочь мне достичь того, чего я хотел.

Я не могу изменить метод или украсить его атрибутами или чем-либо еще. Если бы я мог сделать что-то подобное, мне бы не пришлось это делать, я мог бы просто изменить сам метод.

Ответы [ 4 ]

8 голосов
/ 03 июня 2010

Рассматривали ли вы АОП (аспектно-ориентированное программирование)? Что-то вроде PostSharp .

2 голосов
/ 03 июня 2010

Я считаю, что единственный способ сделать это - либо переписать тело метода, чтобы оно уведомляло вас о вызове метода, либо использовать CLR Profiling Api.

Первый способ может быть реализован с использованием AOP Framework. Вы можете использовать Postsharp (который был превращен в коммерческий продукт) для достижения этого с OnMethodBoundaryAspect. Вот пример: Извлечение класса из OnMethodBoundaryAspect

0 голосов
/ 03 июня 2010

Отражение - это половина решения. Вам нужно обернуть наблюдаемые объекты, чтобы перехватить вызовы метода. Обычно это делается через удаленные прокси-объекты.

Корпоративная библиотека имеет блок перехвата Unity, который делает именно то, что вы хотите. Также вы можете захотеть взглянуть на DynamicProxy фреймворка Castle, который дает вам чрезвычайно полный контроль над процессом перехвата.

Поиск в Google для аспектно-ориентированного программирования даст вам больше информации.

0 голосов
/ 03 июня 2010

вы можете использовать методы расширения

, чтобы вы могли использовать различные атрибуты и изменять все до или после фактического метода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...