2010-06-03 18 views
5

Deseo recibir notificaciones cada vez que se llame un método específico. Esperaba poder lograr esto usando Reflection, pero mis intentos no me han llevado a ninguna parte. ¿Cómo puedo ser notificado?Ser notificado de llamadas a métodos en .NET

Pensé que usar MethodInfo era el camino a seguir, pero como he dicho, no encontré nada que pudiera ayudarme a lograr lo que quería hacer.

No puedo cambiar el método ni decorarlo con atributos ni nada. Si pudiera hacer algo así, no tendría que hacer esto, podría cambiar el método en sí mismo.

Respuesta

8

¿Ha considerado AOP (programación orientada a aspectos)? Algo así como PostSharp.

+1

+1 ¡Definitivamente usaría este método! –

+2

+1 También puede obtener características similares a AOP sin PostSharp usando nada más que decoradores: http://blog.ploeh.dk/2010/04/07/DependencyInjectionIsLooseCoupling.aspx –

+0

un decorador también es una buena idea –

2

Creo que la única manera de hacerlo es reescribiendo el cuerpo del método para que le avise cuando se haya llamado al método o use CLR Profiling Api.

La primera forma se puede lograr utilizando el marco AOP. Puede usar Postsharp (que se convirtió en un producto comercial) para lograrlo con OnMethodBoundaryAspect. Aquí está un ejemplo: Derive the class from OnMethodBoundaryAspect

-1

puede utilizar los métodos de extensión

esta manera puede utilizar diferentes atributos y modificar todo antes o después de que el método actual

+1

No estoy el que llama a estos métodos. No puedo hacer que el código original llame de repente a mis métodos de extensión. Así que no vayas. – Alex

0

reflexión es la mitad de la solución. Debe envolver los objetos observados para interceptar las llamadas al método. Por lo general, esto se hace a través de objetos proxy remotos.

Enterprise Library tiene el bloque Unity Interception que hace exactamente lo que usted desea. También es posible que desee examinar el DynamicProxy de Castle Framework, que le proporciona un control extremadamente completo de este proceso de interceptación.

Google para la programación orientada a aspectos le dará más información.

Cuestiones relacionadas