2009-04-23 8 views
2

J'ai une classe:Exécuter du code spécifique avant les fonctions membres d'une classe utilisant des attributs?

public class MyClass 
{ 
    public int code { set; get; } 
    public bool foo() 
    { 
    // do some stuff 
    // ... 
    code = 100; 
    return true; 
    } 

    public bool bar() 
    { 
    // do some stuff 
    // ... 
    code = 200; 
    return true; 
    } 

    // more methods ... 
    // ... 
} 

Je voudrais réinitialiser la valeur de code à zéro au début de chaque appel de fonction membre. Bien sûr, je peux régler manuellement la valeur à zéro au début de chaque fonction, mais je me demande s'il est possible d'utiliser des attributs à cette fin:

[ResetTheCode] 
public bool bar() 
{ 
    // do some stuff 
    // ... 
    code = 200; 
    return true; 
} 

Quelque chose de similaire aux filtres d'action dans ASP.NET MVC. Est-ce possible?

Répondre

1

Vous pourriez certainement faire quelque chose comme ceci avec un cadre d'AOP (comme PostSharp) mais ne pensez-vous pas que ce serait assez déroutant à n'importe qui peu familier avec votre processus?

Ceci est une de ces choses que même si vous pouvez le faire ne signifie pas nécessairement que vous devriez. Le temps et les efforts nécessaires pour taper le nom de l'attribut au-dessus de la méthode ne peuvent pas être inférieurs au temps et à l'effort nécessaires pour écrire le code de réinitialisation (qui devrait également être dans sa propre méthode).).

2

Un cadre AOP vous permettra de le faire. Castle Windsor, par exemple.

3

D'accord avec Kent. En outre, jetez un oeil à PostSharp, qui est également un cadre .NET AOP très mature.

0

Les attributs en eux-mêmes ne font rien sauf travailler comme un marqueur ou des métadonnées à votre code. Vous devrez écrire un code de réflexion pour obtenir l'attribut et faire quelque chose avec.

Un cadre AOP comme PostSharp, Castle Windsor, et d'autres fait le travail d'évaluation des attributs en fonction des règles de son cadre.

Questions connexes