2012-03-17 12 views
5

Deseo implementar LogAttribute personalizado, que registrará la información al inicio y al final de cada método en una clase, también debe registrar el error también. Me gustaría aplicar el atributo sobre una clase.Cómo implementar LogAttribute personalizado en una clase

He visto PostSharp. Pero me gustaría tener mi propio atributo de registro personalizado, en lugar de utilizar PostSharp o una biblioteca similar.

El rendimiento es la clave principal, el LogAttribute no debe afectar el rendimiento.

He leído acerca de IMessageSync, pero afecta el rendimiento.

En MVC, obtenemos CustomFilters, donde podemos tener LogActionHandler, que se ejecutará al inicio y al final de cada método de Acción. Me gustaría implementar un formulario similar en ASP.Net web.

¿Alguien me puede ayudar proporcionando algún código de muestra.

+4

No te reinventar las ruedas y el uso bien probado, verificado por un tiempo y bibliotecas comunitarias – sll

+0

Es allí cualquier biblioteca libre disponible para registro de atributo? PostSharp se paga ..... – user1233802

+2

@ user1233802: PostSharp tiene una "Edición iniciada" gratuita que te permitirá implementar tu propio 'LogAttribute' personalizado como desees, y no afectará el rendimiento ya que todo está hecho en tiempo de compilación. –

Respuesta

2

Unity: el contenedor de inyección de IoC/Dependency de Microsoft también permite la interceptación de métodos.

He aquí un ejemplo de un "DiagnosticsInterceptor", que hace lo mismo como desee: http://hmadrigal.wordpress.com/2010/12/25/aspect-oriented-programming-and-interceptor-design-pattern-with-unity-2/

Pro: Es gratis

contra: Requiere patrón de la Unidad/DI/COI. Y su clase necesita tener una interfaz o un método virtual.

Desafortunadamente eso NO es cierto para los controles ASP.NET. Así que este método sólo funciona para la clase personalizada: Ver Intercept Unity 2.0 HandlerAttribute without an interface

Cuestiones relacionadas