atrybuty są (z bardzo nielicznymi wyjątkami jak [PrincipalPermission]
które nanosi się przez samą wykonania) metadanych tylko; tak więc nie powoduje dodatkowy magiczny sposób wywoływania. Wyjątkiem są narzędzia takie jak PostSharp, które w czasie kompilacji lokalizuje takie atrybuty i splata w dodatkowy kod.
We wszystkich innych przypadkach konieczne jest sprawdzenie tego atrybutu samodzielnie poprzez odbicie i napisanie kodu, aby wywołać dodatkowe metody z atrybutów. To właśnie robi ASP.NET MVC; identyfikuje oczekiwaną rodzinę atrybutów i wywołuje metody klasy bazowej, aby spowodować uruchomienie filtrów.
Jeśli piszesz framework wtyczki, może to mieć sens. Jeśli jest to instrumentacja oparta na ad-hoc - to nie zadziała, jeśli sam nie dodasz dodatkowego kodu.
Co jest łatwiejsze w zapisywaniu , pisze IDisposable
, który zapisuje upływ czasu, w którym został usunięty; to można zrobić:
using(new MyTimer("My label")) {
//... Your method
}
Może lekkie nadużycie using
ale powinno działać.
PostSharp robi coś dokładnie takiego - niestety nie jest za darmo: http://www.sharpcrafters.com/postsharp –
Czy Castle.DynamicProxy będzie tutaj działać? Nie przesyłając odpowiedzi, bo to naprawdę pytanie. – Amy