Как найти все вхождения пользовательского атрибута в сборках? - PullRequest
3 голосов
/ 18 августа 2010

Как найти каждое вхождение пользовательского атрибута в сборке?

Если можно найти все типы из сборки, где используется атрибут, но этого недостаточно. Как насчет методов, свойств, перечислений, значений перечислений, полей и т. Д.

Есть ли ярлык для этого или единственный способ написать код для поиска во всех частях типа (свойства, поля, методы и т. Д.)?

Reflector делает это, но не уверен, как это реализовано.

Ответы [ 2 ]

11 голосов
/ 18 августа 2010

Do,

assembly.GetTypes()
    .SelectMany(type => type.GetMembers())
    .Union(assembly.GetTypes())
    .Where(type => Attribute.IsDefined(type, attributeType));

Это также вернет значения enum, так как это всего лишь открытые статические поля под капотом.Кроме того, если вам нужны частные участники, вам нужно настроить BindingFlags, который вы передаете.

1 голос
/ 18 августа 2010

Вы можете использовать Type.GetMembers(), чтобы получить все элементы (свойства, методы, поля и т. Д.), Вместо того, чтобы выполнять каждый тип элемента отдельно. Это должно, по крайней мере, сделать это несколько проще.

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

...