0

我正在尝试使用调试器在调用方法属性时停止,但我似乎永远不会到达断点。我在这里错过了什么吗?

[SecurityImpl("test")]
public void test()
{

}

[AttributeUsage(AttributeTargets.All)]
public class SecurityImplAttribute : Attribute
{
    public SecurityImplAttribute(string test)
    {
        //Break Point Here    
    }
 }
4

3 回答 3

2

属性只是元数据。除非您使用反射 ( ) ,否则它们实际上不会被创建为实例。GetCustomAttributes您不能使用属性来添加任意代码调用,除非您使用 PostSharp 等 AOP 框架,或者正在使用检查特定类别属性并显式实例化/调用它们的框架(如 ASP.NET MVC 所做的那样)。

于 2012-07-17T12:20:06.887 回答
1

属性只是代码的元数据。它们不会自动执行。如果你想使用一些元数据,你应该手动获取并执行它。在您尝试获取方法自定义属性时,将执行属性的构造函数:

object[] attributes = methodInfo.GetCustomAttributes(true);

如果您希望在调用方法时自动执行某些方面,则可以使用一些 AOP 框架,例如PostSharp。以下是方面创建的示例,它在方法调用时执行一些操作:

[Serializable]
public class SecurityImplAttribute : OnMethodBoundaryAspect
{
   public override void OnEntry(MethodExecutionArgs args) 
   { 
      // this code will be executed on method call
   }   
}

当您将此属性应用于某个方法时,PostSharp 将在编译期间读取方法的元数据,如果找到了方面,PostSharp 会将您的代码直接注入二进制文件。

于 2012-07-17T12:23:44.560 回答
1

属性只是装饰器,它们不由 .net 框架执行。

于 2012-07-17T12:20:18.323 回答