2011-02-22 4 views
0

J'ai une méthode avec un attribut (dans la bibliothèque C#). Le problème est que cet attribut n'est pas appelé quand j'appelle ma méthode. Je ne comprends pas pourquoi!L'attribut sur la méthode ne fonctionne pas

Mon code:

[AttributeUsage(System.AttributeTargets.Method)] 
public class RequireAuthorization : System.Attribute 
{ 
    private bool _protected = true; 

    public RequireAuthorization(bool protect) 
    { 
     _protected = protect; 
    } 
} 

public class MyClass(){ 

    [RequireAuthorization(true)] 
    public bool method1(){ 
     // some actions 
    } 
} 

Une certaine idée s'il vous plaît?

+2

S'il vous plaît en savoir plus sur les attributs avant de poser ces questions. Je peux seulement dire que les attributs peuvent décrire certaines métadonnées pour les méthodes, les propriétés ou les champs, et que ces métadonnées doivent être lues manuellement en utilisant la réflexion – Disposer

+1

Et vérifiez la convention de nommage. La classe doit être nommée RequireAuthorizationAttribute. – gsharp

Répondre

0

Les attributs sont simplement des métadonnées et n'effectuent aucune sorte d'interception de pré/post d'invocations de méthode.

Pour que cela fonctionne, vous avez besoin d'un mécanisme d'interception, par ex. Post # ou mandataires dynamiques etc.

Voir http://www.sharpcrafters.com/solutions/security

1

Les attributs ne sont que des métadonnées, ils sont jitted et une partie de votre base de code, mais ils ne doivent pas fonctionner.

Pour appliquer l'exécution de votre attribut personnalisé que vous pouvez utiliser la réflexion, ce qui suit causerait le constructeur de votre classe RequireAuthorization à exécuter:

MemberInfo memberInfo = typeof(MyClass).GetMethod("method1"); 
var attributes = memberInfo.GetCustomAttributes(false); 
Questions connexes