2012-03-17 12 views
5

Desidero implementare LogAttribute personalizzato, che registrerà le informazioni all'inizio e alla fine di ogni metodo in una classe, inoltre dovrebbe registrare anche l'errore. Vorrei applicare l'attributo su una classe.Come implementare LogAttribute personalizzato su una classe

Ho visto PostSharp. Ma mi piacerebbe avere il mio attributo log personalizzato, piuttosto che usare PostSharp o una libreria simile.

Le prestazioni sono la chiave principale, LogAttribute non dovrebbe influire sulle prestazioni.

Ho letto su IMessageSync, ma influisce sulle prestazioni.

In MVC, otteniamo CustomFilters, in cui possiamo avere LogActionHandler, che verrà eseguito all'inizio e alla fine di ogni metodo di azione. Mi piacerebbe implementare simili in ASP.Net web Form.

Qualcuno può aiutarmi fornendo un codice di esempio.

+4

Non reinventare le ruote e l'uso ben testati, verificata da un tempo e biblioteche comunali – sll

+0

È ther qualsiasi libreria gratuita disponibile per Log attributo? PostSharp è pagato ..... – user1233802

+2

@ user1233802: PostSharp ha una "Edizione iniziale" gratuita che ti permetterà di implementare il tuo "LogAttribute" personalizzato come preferisci, e non influirà sulle prestazioni dal momento che è tutto fatto a compilare il tempo. –

risposta

2

Unity: il contenitore di iniezione IoC/Dipendenza di Microsoft consente anche l'intercettazione del metodo.

Ecco un esempio di "DiagnosticsInterceptor", che fa lo stesso come si desidera: http://hmadrigal.wordpress.com/2010/12/25/aspect-oriented-programming-and-interceptor-design-pattern-with-unity-2/

Pro: È gratis

Con: Richiede modello Unità/DI/CIO. E la tua classe ha bisogno di avere un'interfaccia, o un metodo virtuale.

Sfortunatamente ciò non è vero per i controlli ASP.NET. Quindi questo metodo funziona solo per la classe personalizzata: Vedi Intercept Unity 2.0 HandlerAttribute without an interface

Problemi correlati