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);
Он ничего не возвращает. Как я могу получить доступ к моему первоначальному значению смещения (свойство по моему атрибуту)?
Ответы
Ответ 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());
}