Могут ли быть скрыты атрибуты свойства? - PullRequest
4 голосов
/ 26 августа 2011

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

Рассматриваемая сборка - это SolrNet, а Атрибут имеет тип SolrField.

Пример класса с использованием:

public class PublicDocument : SearchItem {

    [SolrField("case")]
    public string CaseNumber { get; set; }

    [SolrField("case_name")]
    public string CaseName { get; set; }
}

Вот мой код для получения этих атрибутов.Любопытно, что свойство. Атрибуты пустые! EDIT : после повторного просмотра это свойство будет пустым даже для других пользовательских типов и, по-видимому, зарезервировано для атрибутов фреймворка.

        PublicDocument item = new PublicDocument();
        foreach (PropertyInfo property in item.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) {

            foreach (object attribute in property.GetCustomAttributes(typeof(SolrField), true)) {
                //do some stuff here
            }
        }

Здесь определено SolrField: https://github.com/mausch/SolrNet/blob/master/SolrNet/Attributes/SolrFieldAttribute.cs

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

1 Ответ

6 голосов
/ 26 августа 2011

Трудно сказать наверняка.Мое первое предположение было бы, что вы могли бы использовать typeof(SolrFieldAttribute) вместо typeof(SolrField).

...