自定义属性调用

时间:2012-07-17 12:16:30

标签: c# custom-attributes invocation

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

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

}

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

3 个答案:

答案 0 :(得分:2)

属性仅为元数据。除非您使用反射(GetCustomAttributes),否则它们实际上不是创建作为实例。您不能使用属性来添加任意代码调用,除非您使用AOP框架(如PostSharp),或使用检查特定类别的属性并明确实例化/调用它们的框架(如ASP.NET) MVC确实如此。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

Attrubutes只是代码的元数据。它们不会自动执行。如果要使用某些元数据,则应手动获取并执行它。在您的情况下,当您尝试获取方法自定义属性时,将执行属性的构造函数:

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会将您的代码直接注入二进制文件。