Подключение класса атрибутов .NET - PullRequest
1 голос
/ 10 ноября 2010

Есть ли способ написать собственный класс, который расширяет класс .NET Attribute, чтобы я мог применить этот класс к методу, и .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 ().

Ответы [ 3 ]

2 голосов
/ 10 ноября 2010

В обычных атрибутах .NET не вызывает магического вызова, за исключением очень ограниченного набора системных атрибутов (безопасность и т. Д.). Остальные применяются только при проверке путем отражения, что должно быть сделано явно.

Вы можете посмотреть на PostSharp (теперь переименованный в коммерческий продукт ).

1 голос
/ 10 ноября 2010

Я не верю в это - атрибуты читаются только вещами, отраженными над кодом, они не вызываются во время нормального выполнения.

0 голосов
/ 10 ноября 2010

Да, это возможно, но не так, как есть.

Это можно сделать с помощью аспектно-ориентированного программирования. PostSharp - это фреймворк, который позволяет вам это делать; это позволяет вам «вплетать» аспекты в код во время компиляции.

PostSharp

[Serializable]
public class TestAttribute : OnMethodInvocationAspect
{
   public override void OnInvocation()
   {
       Console.WriteLine ("TestAttribute called");
       base.OnInvocation();
   }
}
...