PostSharp: пользовательские атрибуты удаляются при использовании OnMethodInvocationAspect - PullRequest
11 голосов
/ 08 октября 2009

У меня есть такой аспект:

public class MyAttribute : OnMethodInvocationAspect
{
    public int Offset { get; internal set; }

    public MyAttribute(int offset)
    {
        this.Offset = offset;
    }

    public override void OnInvocation(MethodInvocationEventArgs eventArgs)
    {
         //do some stuff
    }
}

Теперь у меня есть свой класс, и я добавляю к нему свой атрибут:

class MyClass
{
    [MyAttribute(0x10)]
    public int MyProp { get; set; }
}

Работает все отлично. И все же теперь я хочу использовать отражение, чтобы получить свое смещение; когда я

typeof(MyClass).GetProperty("MyProp").GetCustomAttributes(true);

ничего не возвращает. Как получить доступ к исходному значению смещения (свойство моего атрибута)?

1 Ответ

16 голосов
/ 08 октября 2009

Ах, я исправил это так:

Сначала добавьте атрибут в определение атрибута, например:

[MulticastAttributeUsage(MulticastTargets.Method, PersistMetaData=true)]
public class MyAttribute : OnMethodInvocationAspect

И тогда я могу вызвать метод get_ для моего свойства, чтобы получить данные, которые мне нужны:

        foreach (PropertyInfo pi in typeof(T).GetProperties())
        {
            var entityAttribute = (MyAttribute)(typeof(T).GetMethod("get_" + pi.Name).GetCustomAttributes(typeof(MyAttribute), true).FirstOrDefault());
        }
...