Подтвердить что ты не робот

PostSharp: пользовательские атрибуты удаляются при использовании OnMethodInvocationAspect

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

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);

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

4b9b3361

Ответ 1

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

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

[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());
        }