Проблема заключается в том, что проверка AllowMultiple
сравнивает только атрибуты одного и того же фактического типа (то есть конкретизированный конкретный тип) - и, возможно, лучше всего использовать с атрибутами sealed
по этой причине.
Это, например, обеспечит принудительное выполнение следующего (как недопустимый дубликат), унаследовав это от BaseAttribute
:
[DerivedAttributeB()]
[DerivedAttributeB()]
public string Name { get; set; }
Короче говоря, я не думаю, что вы можете делать то, что вы хотите здесь ... (принудительно применять не более одного экземпляра , включая подклассы из BaseAttribute
для свойства).
Подобный пример этой проблемы:
[Description("abc")]
[I18NDescriptionAttribute("abc")]
public string Name { get; set; }
class I18NDescriptionAttribute : DescriptionAttribute {
public I18NDescriptionAttribute(string resxKey) : base(resxKey) { }
}
Цель выше - предоставить [Description]
от resx во время выполнения (полностью поддерживается ComponentModel
и т. Д.) - но не может остановить вас также добавив [Description]
.