2012-01-15 12 views
0

私はいくつかの方法でオブジェクトを持っています。そのうちのいくつかは[AuthenticationRequired]属性で装飾されています。いつ、どのようにして、被呼び出し者が認証されているかどうかを確認する必要がありますか?メソッド呼び出しの属性を分析する方法は?

これは単なるnullチェックですが、実際のメソッド呼び出しにフックする方法はわかりません。私はここで一種迷っています。

ドI:

  1. Use a StackFrame、このクラスで呼び出されるトップレベルの方法を決定した後、可能な認証の問題を把握?
  2. 属性を持つすべてのメソッドにこのチェックを含めますか?その属性は何のために良いのですか?
  3. どういうわけか、クラスにあるすべてのメソッド呼び出しにフックをかけ、属性があるかどうかを調べます。

クラス構造はおおよそである:

public class Stuff 
{ 
    public void ImFine() 
    { 
     CommonMethod("fine"); 
    } 

    public void ImGood() 
    { 
     CommonMethod("good"); 
    } 

    [AuthenticationRequired] 
    public void ImTerrible() 
    { 
     CommonMethod("terrible", true); // not an optional parameter. 
    } 

    [AuthenticationRequired] 
    public void ImDeceased() 
    { 
     CommonMethod("dead"); 
    } 

    protected void CommonMethod(string state) 
    { 
     Console.WriteLine(string.Format("I feel {0}", state)); 
    } 

    protected void CommonMethod(string state, bool pet) 
    { 
     if (pet) 
     { 
      Console.WriteLine(string.Format("My pet feels {0}", state)); 
     } 
     else 
     { 
      Console.WriteLine(string.Format("I feel {0}", state)); 
     } 
    } 
} 

CommonMethodがかろうじてより複雑であり、1つは、(すべての呼び出し先が共有する一つの方法を有するために)他を呼び出すことができないと仮定する。

+0

「それは何のために良いのですか?」と私は考えていません。メソッドILが権限チェックコードを挿入するようにAOPスタイルのツールが必要です。ポストシャープが人気です。 –

答えて

1

アスペクト指向プログラミングについて考えましたか?いくつかの実装、つまりPostSharpまたはCastleをご覧ください。

関連する問題