2011-02-22 19 views
0

属性を持つメソッドがあります(C#ライブラリ内)。問題は、メソッドを呼び出すときに属性が呼び出されないということです。なぜか分からない!メソッドの属性が機能しません

マイコード:

[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 
    } 
} 

いくつかのアイデアしてください?

+2

、このような質問をする前に、属性の詳細については、してください。属性はメソッド、プロパティ、フィールドのメタデータを記述することができるとしか言えず、このメタデータはリフレクション – Disposer

+1

を使用して手動で読み込み、命名規則をチェックしてください。クラスの名前はRequireAuthorizationAttributeにする必要があります。 – gsharp

答えて

0

属性は単純にメタデータであり、メソッド呼び出しの前後の並べ替えを実行しません。

これが機能するには、いくつかの遮断メカニズムが必要です。などのポスト#または動的プロキシ

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

1

属性を参照してください。メタデータだけあり、彼らはJITコンパイルして、コードベースの一部であるが、彼らは実行する必要はありません。

あなたはリフレクションを使用することができます属性カスタムを実行している強制するには、次のようにあなたの RequireAuthorizationクラスのコンストラクタが実行されることになります:

MemberInfo memberInfo = typeof(MyClass).GetMethod("method1"); 
var attributes = memberInfo.GetCustomAttributes(false); 
関連する問題