如何分析方法调用的属性?

时间:2012-01-15 14:53:29

标签: c# reflection attributes

我有一个有几种方法的对象。其中一些装饰有[AuthenticationRequired]属性。何时以及如何检查被叫方是否已通过身份验证?

这只是一个简单的null检查,但我不知道如何将它挂钩到实际的方法调用。我有点迷失在这里。

我:

  1. Use a StackFrame,确定此类调用的顶级方法,然后找出可能的身份验证问题?
  2. 在每个具有该属性的方法中包含此检查?那么属性有什么用呢?
  3. 以某种方式挂钩我班上的所有方法调用,弄清楚它们是否具有属性?
  4. 班级结构大致如下:

    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 :(得分:1)

您是否考虑过面向方面编程?您可以查看一些实现,即:PostSharpCastle