Por padrão, os Attribute
s são limitados a serem aplicados apenas uma vez a um único campo / propriedade / etc. Você pode ver isso na definição da Attribute
classe no MSDN :
[AttributeUsageAttribute(..., AllowMultiple = false)]
public abstract class Attribute : _Attribute
Portanto, como outros observaram, todas as subclasses são limitadas da mesma maneira e, caso você precise de várias instâncias do mesmo atributo, é necessário definir explicitamente AllowMultiple
como true
:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
Em atributos que permitem vários usos, você também deve substituir a TypeId
propriedade para garantir que as propriedades PropertyDescriptor.Attributes
funcionem conforme o esperado. A maneira mais fácil de fazer isso é implementar essa propriedade para retornar a própria instância do atributo:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
{
public override object TypeId
{
get
{
return this;
}
}
}
(Postar esta resposta não porque as outras estejam erradas, mas porque esta é uma resposta mais abrangente / canônica.)