2010-06-03 25 views
5

Chcę otrzymywać powiadomienia za każdym razem, gdy zostanie wywołana określona metoda. Miałem nadzieję, że uda mi się to osiągnąć za pomocą Reflection, ale moje próby nigdzie nie dotarły. Jak mogę otrzymać powiadomienie?Otrzymuj powiadomienia o wywołaniach metod w .NET

Doszedłem do wniosku, że przy użyciu MethodInfo było do zrobienia, ale jak powiedziałem, nie znalazłem nic, co mogłoby mi pomóc osiągnąć to, co chciałem zrobić.

Nie mogę zmienić metody ani udekorować jej atrybutami ani niczym. Gdybym mógł zrobić coś takiego, nie musiałbym tego robić, mogłem po prostu zmienić samą metodę.

Odpowiedz

8

Czy brałeś pod uwagę AOP (programowanie zorientowane na aspekt)? Coś takiego jak PostSharp.

+1

+1 Zdecydowanie użyłbym tej metody! –

+2

+1 Możesz także osiągnąć funkcje podobne do AOP bez PostSharp używając tylko dekoratorów: http://blog.ploeh.dk/2010/04/07/DependencyInjectionIsLooseCoupling.aspx –

+0

dekorator jest również dobrym pomysłem –

2

Wierzę, że jedynym sposobem, aby to zrobić, jest przepisanie treści metody tak, aby powiadamiała użytkownika, gdy metoda została wywołana lub używa CLR Profilowania Api.

Pierwszy sposób można osiągnąć za pomocą ramy AOP. Możesz użyć Postsharp (który został przekształcony w produkt komercyjny), aby osiągnąć to za pomocą OnMethodBoundaryAspect. Oto przykład: Derive the class from OnMethodBoundaryAspect

-1

można użyć metody rozszerzenie

, dzięki czemu można korzystać z różnych atrybutów i modyfikować wszystko przed lub po faktycznym sposobem

+1

Nie jestem ten, który nazywa te metody. Nie mogę sprawić, że oryginalny kod nagle wywoła moje metody rozszerzenia. Więc nie idź. – Alex

0

refleksja jest pół rozwiązaniem. Musisz owijać obserwowane obiekty w celu przechwycenia wywołań metod. Zwykle odbywa się to za pośrednictwem zdalnych obiektów proxy.

Biblioteka korporacyjna ma blok przechwytywania Unity, który robi dokładnie to, co chcesz. Możesz również zajrzeć do DynamicProxy Castle framework, która zapewnia bardzo dokładną kontrolę nad procesem przechwytywania.

Googling do programowania zorientowanego na aspekt daje więcej informacji.

Powiązane problemy