2012-03-17 5 views
5

Je souhaite implémenter LogAttribute personnalisé, qui consignera les informations au début et à la fin de chaque méthode dans une classe, ainsi que les erreurs de consignation. Je voudrais appliquer l'attribut sur une classe.Comment implémenter LogAttribute personnalisé sur une classe

J'ai vu PostSharp. Mais je voudrais avoir mon propre attribut de journal personnalisé, plutôt que d'utiliser PostSharp ou une bibliothèque similaire. La performance est la clé principale, le LogAttribute ne devrait pas affecter les performances.

J'ai lu à propos de IMessageSync, mais cela affecte les performances.

Dans MVC, nous obtenons CustomFilters, dans lequel nous pouvons avoir LogActionHandler, qui s'exécutera au début et à la fin de chaque méthode d'action. Je voudrais mettre en œuvre similaire dans le formulaire Web ASP.Net.

Quelqu'un peut-il m'aider en fournissant un exemple de code.

+4

Ne réinventez pas les roues et l'utilisation bien éprouvés, vérifiés par un temps et des bibliothèques communautaires – sll

+0

est-ther une bibliothèque gratuite disponible pour attribut journal? PostSharp est payé ..... – user1233802

+2

@ user1233802: PostSharp a une "Édition commencée" gratuite qui vous permettra d'implémenter votre propre "LogAttribute" personnalisé comme vous le souhaitez, et cela n'affectera pas les performances car tout est fait à compiler le temps. –

Répondre

2

Unity - Le conteneur d'injection IoC/Dépendance de Microsoft permet également l'interception de méthodes.

Voici un exemple d'un "DiagnosticsInterceptor", qui fait la même chose que vous voulez: http://hmadrigal.wordpress.com/2010/12/25/aspect-oriented-programming-and-interceptor-design-pattern-with-unity-2/

Pro: Il est gratuit

Con: Il faut modèle l'unité/DI/IoC. Et votre classe doit avoir une interface, ou une méthode virtuelle.

Malheureusement, cela n'est pas vrai pour les contrôles ASP.NET. Ainsi, cette méthode ne fonctionnera que pour votre classe personnalisée: Voir Intercept Unity 2.0 HandlerAttribute without an interface

Questions connexes