.NET属性类插件

.NET属性类插件,.net,custom-attributes,.net,Custom Attributes,有没有办法编写一个扩展.NET属性类的自定义类,这样我就可以在方法上应用该类,.NET Framework在执行该方法之前调用我的类构造函数。这是一个例子 public class TestAttribute : Attribute { public TestAttribute() { Console.WriteLine("Called"); } } class Program { static void Main(string[] args)

有没有办法编写一个扩展.NET属性类的自定义类,这样我就可以在方法上应用该类,.NET Framework在执行该方法之前调用我的类构造函数。这是一个例子

public class TestAttribute : Attribute
{
    public TestAttribute()
    {
        Console.WriteLine("Called");
    }
}

class Program
{
    static void Main(string[] args)
    {
        TestMethod();
    }

    [TestAttribute()]
    public static void TestMethod()
    {

    }

}

我希望在调用TestMethod时,框架将执行TestAttribute()构造函数。

我不相信这样的说法-属性只由反映在代码上的东西读取,它们在正常执行过程中不会被调用。

在常规的.NET属性中,除了一组非常有限的系统属性(安全性等)之外,不会导致神奇的调用. 其余部分仅通过反射检查应用,反射必须明确执行


您可以查看PostSharp(现在改名为a)。

是的,这是可能的,但并非如此

您可以通过使用面向方面的编程来实现这一点。PostSharp是一个允许您这样做的框架;它允许您在编译时将方面“编织”到代码中


另一个选项(仅限ASP.NET MVC)是创建
ActionFilterAttribute
的子类。请看一个例子。@rsenna这是一个非常具体的例子,最终还是通过反射调用的。@Marc gravel:1)这就是为什么我将其作为注释而不是响应添加的原因。2) 它完成了任务(OP希望向方法添加运行时行为,我认为他/她不关心实现细节)。3) 我给了你+1,所以不要抱怨!;-)我使用.NETFramework 3.5(Web表单)。我可以毫无问题地使用System.Web.Mvc程序集吗?我在我的机器上找不到这些程序集。如果使用反射,会对性能产生显著影响吗?@kumar:不,我认为在WebForms中使用
ActionFilterAttribute
不是一个好主意-这是一种仅限ASP.NET MVC的方法。您应该尝试PostSharp或其他AOP库。
[Serializable]
public class TestAttribute : OnMethodInvocationAspect
{
   public override void OnInvocation()
   {
       Console.WriteLine ("TestAttribute called");
       base.OnInvocation();
   }
}