Как бы я использовал рефлексию для вызова всех методов, которые имеют определенный пользовательский атрибут?
У меня есть класс с кучей методов.
некоторые из этих методов помечены пользовательским атрибутом.
Я хотел бы вызвать все эти методы сразу.
Как бы я использовал рефлексию, чтобы найти список всех методов в этом классе, который содержит этот атрибут?
2 ответа
Как только вы получите список методов, вы будете циклически запрашивать пользовательские атрибуты, используя метод GetCustomAttributes. Возможно, вам придется изменить BindingFlags в соответствии с вашей ситуацией.
var methods = typeof( MyClass ).GetMethods( BindingFlags.Public );
foreach(var method in methods)
{
var attributes = method.GetCustomAttributes( typeof( MyAttribute ), true );
if (attributes != null && attributes.Length > 0)
//method has attribute.
}
Сначала вы должны вызвать typeof(MyClass).GetMethods(), чтобы получить массив всех методов, определенных для этого типа, затем выполнить цикл по каждому из возвращаемых методов и вызвать methodInfo.GetCustomAttributes (typeof (MyCustomAttribute), true) для получить массив пользовательских атрибутов указанного типа. Если массив нулевой длины, то ваш атрибут отсутствует в методе. Если он ненулевой, то ваш атрибут находится в этом методе, и вы можете использовать MethodInfo.Invoke() для его вызова.