2008-12-22 5 views
1

Lorsqu'une application est lancée, j'ai besoin de connaître certaines méthodes lors de leur lancement. Comment faire cela en utilisant des attributs et des techniques AOP?Capture d'événements pour la journalisation Objectif

La façon la plus simple est d'enregistrer le temps dans la méthode d'événement comme celui-ci:

private void Page_load() 
{ 
    DateTime dt = DateTime.Now; 
} 

et enregistrez le Datetime dans une base de données. Mais ce n'est certainement pas souhaitable car cela laissera à la méthode beaucoup de fonctions transversales, rendant le travail de maintenance plus difficile. Je pense à utiliser des attributs pour résoudre ce problème. PostSharp semble être un bon candidat car il peut intercepter les appels de méthode et faire les pré et post-traitement que vous voulez. Mais une chose qui manque clairement est qu'il ne peut pas gérer les événements sans que j'écrive beaucoup de code personnalisé.

Y a-t-il un cadre qui peut gérer les événements naturellement?

Répondre

1

Vous n'avez pas besoin d'avoir une méthode distincte pour chaque événement que vous souhaitez enregistrer comme ceci.

Ecrivez une seule méthode pour faire l'enregistrement:

public static void LogEventRaised(string event) 
{ 
    ... 
} 

abonnez-vous alors aux événements en utilisant une méthode anonyme:

Load += delegate { LogEventRaised("Load") }; 

Oui, il est impératif plutôt que déclarative, et répète le nom de l'événement - Mais c'est quand même assez compact. Vous pouvez attacher des gestionnaires à tous les événements en utilisant la réflexion, mais ce serait probablement trop.

1

Le cadre Spring est doté d'un module de programmation orienté aspect qui prend en charge la journalisation.

2

Postsharp peut probablement vous aider ici

+0

Poster Sharp est l'un des plus faciles cadres AOP .net. Les gens heureux aiment ça. +1 à vous – Perpetualcoder

+0

Merci, mais malheureusement PostSharp ne prend pas en charge les événements: http://www.postsharp.org/forum/postsharp-laos/equivalent-oneventboundaryaspect-t617.html – Graviton

Questions connexes