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

C# 如何分析方法调用的属性?,c#,reflection,attributes,C#,Reflection,Attributes,我有一个有几种方法的对象。其中一些用[AuthenticationRequired]属性修饰。何时以及如何检查被叫方是否经过身份验证 这只是一个简单的null检查,但我不知道如何将它与实际的方法调用挂钩。我有点迷路了 我是否: ,确定在此类上调用的顶级方法,然后找出可能的身份验证问题 是否在每个具有该属性的方法中都包含此检查?那么,这种属性有什么好处呢 以某种方式钩住类上的所有方法调用,弄清楚它们是否具有该属性 班级结构大致如下: public class Stuff { public

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

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

我是否:

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

    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
    稍微复杂一点,一个不能调用另一个(为了让每个被调用方共享一个方法)。

    您考虑过面向方面编程吗?您可以看看一些实现,例如:或。

    那么属性有什么好处呢?
    我想不出多少。您需要一个AOP风格的工具,以便重写方法IL以注入授权检查代码。PostSharp很受欢迎。