2010-06-03 12 views
5

Desidero ricevere una notifica ogni volta che viene chiamato un metodo specifico. Speravo di poterlo fare usando Reflection, ma i miei tentativi non mi hanno portato da nessuna parte. Come posso essere avvisato?Essere notificato delle chiamate di metodo in .NET

Ho pensato di usare MethodInfo era la strada da percorrere, ma come ho detto, non ho trovato nulla che potesse aiutarmi a realizzare ciò che volevo fare.

Non riesco a modificare il metodo o decorarlo con attributi o altro. Se potessi fare qualcosa del genere, non avrei bisogno di farlo, potrei semplicemente cambiare il metodo stesso.

risposta

8

Avete considerato AOP (programmazione orientata agli aspetti)? Qualcosa come PostSharp.

+1

+1 Userei sicuramente questo metodo! –

+2

+1 È inoltre possibile ottenere funzionalità simili a AOP senza PostSharp utilizzando nient'altro che Decoratori: http://blog.ploeh.dk/2010/04/07/DependencyInjectionIsLooseCoupling.aspx –

+0

un decoratore è anche una buona idea –

2

Credo che l'unico modo per eseguire questa operazione sia riscrivere il corpo del metodo in modo che venga notificato quando il metodo è stato chiamato o utilizzato CLR Profiling Api.

Il primo modo può essere realizzato utilizzando il framework AOP. È possibile utilizzare Postsharp (che è stato trasformato in un prodotto commerciale) per ottenerlo con OnMethodBoundaryAspect. Ecco un esempio: Derive the class from OnMethodBoundaryAspect

-1

è possibile utilizzare metodi di estensione

modo da poter utilizzare diversi attributi e modificare tutto prima o dopo il metodo effettivo

+1

Non lo sono quello che chiama questi metodi. Non riesco a rendere improvvisamente il codice originale chiamare i miei metodi di estensione. Quindi non andare. – Alex

0

riflessione è metà della soluzione. È necessario avvolgere gli oggetti osservati per intercettare le chiamate al metodo. Di solito questo viene fatto tramite oggetti proxy remoti.

Enterprise Library dispone del blocco Unity Interception che fa esattamente ciò che si desidera. Inoltre, potresti voler esaminare DynamicProxy di Castle Framework, che ti offre un controllo estremamente approfondito di questo processo di intercettazione.

Googling per la programmazione orientata agli aspetti ti fornirà ulteriori informazioni.

Problemi correlati