2012-03-17 15 views
5

Chcę zaimplementować niestandardowy LogAttribute, który będzie rejestrować informacje na początku i na końcu każdej metody w klasie, również powinien również rejestrować błąd. Chciałbym zastosować ten atrybut do klasy.Jak zaimplementować niestandardowy LogAttribute na klasę

Widziałem PostSharp. Ale chciałbym mieć własny niestandardowy atrybut dziennika, zamiast używać biblioteki PostSharp lub podobnej.

Wydajność jest najważniejszym kluczem, LogAttribute nie powinno wpływać na wydajność.

Przeczytałem o IMessageSync, ale ma to wpływ na wydajność.

W MVC otrzymujemy CustomFilters, w którym możemy mieć LogActionHandler, który będzie wykonywany na początku i na końcu każdej metody Action. Chciałbym zaimplementować podobne w formularzu sieci ASP.Net.

Czy ktoś może mi pomóc, dostarczając przykładowy kod.

+4

Nie odkrywać koła i używać dobrze sprawdzone, zweryfikowane przez czas i bibliotek społeczności – sll

+0

Czy Ther każdy wolny biblioteka dostępna dla dziennika Atrybut? PostSharp jest płatny ..... – user1233802

+2

@ user1233802: PostSharp ma darmową "Edycję początkową", która pozwoli ci zaimplementować własny niestandardowy "LogAttribute", ale nie ma to wpływu na wydajność, ponieważ wszystko jest gotowe na czas kompilacji. –

Odpowiedz

2

Unity - Microsoft IoC/Dependency Injection Container pozwala również na przechwytywanie metod.

Oto przykład "DiagnosticsInterceptor", który robi to samo, jak chcesz: http://hmadrigal.wordpress.com/2010/12/25/aspect-oriented-programming-and-interceptor-design-pattern-with-unity-2/

Pro: To nic nie kosztuje

Con: Wymaga Unity/DI/IoC wzór. Twoja klasa potrzebuje interfejsu lub metody wirtualnej.

Niestety to NIE jest prawdziwe w przypadku kontrolek ASP.NET. więc ta metoda działa tylko dla niestandardowej klasy: Zobacz Intercept Unity 2.0 HandlerAttribute without an interface

Powiązane problemy