à l'aide de C# Attributs Personnalisés pour l'exception et de la piste d'audit de journalisation
est-il possible de créer une fonction qui capture des exceptions dans une méthode qui sont définies par un attribut personnalisé?
planification de la gi pour faire quelque chose comme ceci:
[Logging(FeatureEnum.SomeFeature, IntentEnum.SomeIntent, "some comment")]
public void SomeMethodThatDoesATask()
{
try
{
var doSomeAction = new LazyProcess();
doSomeAction.WhoDunnit();
}
catch(Exception ex)
{
StaticMethodThatDoesLogging.CatchError(ex);
}
}
Question est la suivante:
Comment puis-je capturer le nom de la Méthode où cet attribut a été fait et ce que l'événement a été jeté? Il peut capturer une exception ou tout simplement se connecter automatiquement que cette méthode a été appelée.
Connaissez-vous le PostSharp bibliothèque? sharpcrafters.com/postsharp (pas plus gratuitement).
bonjour Uwe, la raison pour laquelle je suis en train de faire mon propre.
Juste mon avis, mais l'édition de la communauté (qui EST gratuit, sortof) a plus que suffisamment de fonctionnalités pour la plupart des utilisations. J'ai lu qu'il y en a de graves sorcellerie prise de PostSharp travail et je préfère les laisser s'en occuper. Sinon, bonne chance!
bonjour Uwe, la raison pour laquelle je suis en train de faire mon propre.
Juste mon avis, mais l'édition de la communauté (qui EST gratuit, sortof) a plus que suffisamment de fonctionnalités pour la plupart des utilisations. J'ai lu qu'il y en a de graves sorcellerie prise de PostSharp travail et je préfère les laisser s'en occuper. Sinon, bonne chance!
OriginalL'auteur Martin Ongtangco | 2010-12-23
Vous devez vous connecter pour publier un commentaire.
Cela ne peut pas être facilement atteint. Par exemple TypeMock utilise le .NET framework API profiler pour surveiller l'exécution d'une application. Il vous permet de vous inscrire pour les différents événements et être averti lorsqu'une méthode est appelée, une exception se produit, ... mais cela ne va pas être une tâche facile.
D'autre part, vous pourriez utiliser l'AOP, mais il vous oblige à modifier votre code, de sorte que l'appelant utilise des proxy généré à la place de la vraie classe. Spring.NET a quelques fonctionnalités intéressantes à ce sujet.
Donc, fondamentalement, sans l'aide de l' .NET framework API Profiler ou sans écrire du code personnalisé qui lit ces attributs à partir d'une classe donnée à l'aide de réflexion, vous ne peut pas atteindre cet objectif. Les attributs sont juste les métadonnées de la classe et sans quelque chose qui aurait du sens d'entre eux, ils ne font rien.
OriginalL'auteur Darin Dimitrov
Ont un coup d'oeil à
http://www.dcl.hpi.uni-potsdam.de/research/loom/rapier_loom.htm
http://www.dcl.hpi.uni-potsdam.de/research/loom/gripper_loom.htm
Première est runtime weaver tandis que la seconde est statique weaver.
Ces sont d'autres bonnes ressources:
http://ayende.com/Blog/archive/2007/07/02/7-Approaches-for-AOP-in-.Net.aspx
http://msdn.microsoft.com/en-us/magazine/cc301356.aspx
http://www.codeproject.com/KB/architecture/AOP_Injection_IL.aspx
OriginalL'auteur VinayC
Attributs sont simplement des métadonnées. Vous aurez besoin de faire le code de tissage, en utilisant quelque chose comme PostSharp, ou utilisent un moteur d'exécution de l'interception de la bibliothèque, tels que le Château.DynamicProxy. Par eux-mêmes attributs contiennent pas de véritable fonctionnalité de l'application, sauf par le biais de la réflexion.
Si vous avez une ligne de code à l'intérieur de la méthode qui ne la journalisation, vous pouvez obtenir la structure de pile de la méthode d'appel, utiliser la réflexion pour vérifier l'attribut, et à partir de là. Je suis en supposant que c'est ce que tu voulais faire avec StaticMethodThatDoesLogging.
OriginalL'auteur Amy