Fondamentalement, j'essaie d'implémenter une sorte de programmation orientée aspect pauvre en C#. J'avais pensé à utiliser un ContextAttribute mais ils semblent seulement être liés au niveau de la classe. Y a-t-il un moyen de mettre un attribut de telle sorte qu'il reçoive les mêmes paramètres que la méthode qu'il annote ou d'une manière ou d'une autre d'accéder au contexte dans lequel il a été déclenché?Obtention du contexte d'attribut en C#
J'ai ce code
public void AddUser(User user)
{
var errors = DataAnnotationsValidationRunner.GetErrors(user);
if (errors.Any())
throw new RulesException(errors);
users.Add(user);
}
dont je voudrais extraire les 3 premières lignes, donc j'avais quelque chose comme
[Validated]
public void AddUser(User user)
{
users.Add(user);
}
+1 pour PostSharp –
C'est parfait, je ne me suis pas rendu compte qu'il y avait un tisserand d'aspect pour C# ayant lu quelque part que ce n'était pas possible. Je suppose que postsharp sort de http://zombo.com où l'impossible est possible. – stimms
Juste pour info, jetez un oeil aux plugins qui viennent avec Postsharp. Je sais que log4postsharp (qui marie log4net et postsharp) vient avec l'attribut log [] qui enregistrera l'entrée/sortie dans une méthode (y compris la réflexion sur tous les paramètres passés (et leurs valeurs!)). Vous pouvez simplement réécrire ce code pour faire la validation que vous souhaitez. Cela vous ferait certainement gagner du temps ... –