我正在尝试调试器在调用方法属性时停止,但我似乎永远不会到达断点。 我在这里错过了什么吗?
[SecurityImpl("test")]
public void test()
{
}
[AttributeUsage(AttributeTargets.All)]
public class SecurityImplAttribute : Attribute
{
public SecurityImplAttribute(string test)
{
//Break Point Here
}
}
答案 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会将您的代码直接注入二进制文件。