Adicione programaticamente um atributo a um método ou parâmetro
-
25-09-2019 - |
Pergunta
Eu posso usar o typeDescriptor.addattributes para adicionar um atributo a um tipo no tempo de execução. Como faço o mesmo para um método e parâmetro? (talvez 2 perguntas separadas ...)
Solução
TypeDescriptor.AddAttributes
afeta apenas a muito caso de uso específico; ou seja, de dentro System.ComponentModel
. Para o descanso de reflexão, sabe nada sobre o atributo extra. E realmente, System.ComponentModel
Realmente não se aplica a métodos ou parâmetros.
Então, em suma; você não pode. Você precisará armazenar essas informações em outro lugar (sob medida) ou adicioná-las em tempo de compilação.
Outras dicas
Como vejo ao analisar o TypeDescriptor
classe em refletor, o .AddAttributes
Método chama internamente o .AddProvider
método. o TypeDescriptionProvider
A instância passada é realmente responsável por fornecer metadados. Você pode tentar adicionar o atributo [typeDescriptionProviderattribute] à sua classe e implementar seu próprio provedor, derivando do TypeDescriptionProvider
classe. Como diz a documentação, substituindo TypeDescriptionProvider.CreateInstance
, você pode fornecer um objeto substituto cujo tipo tem todos os atributos necessários. Suspeito que os atributos aplicados aos métodos dentro do tipo de substituição também entrarão em vigor. No entanto, eu não tentei isso sozinho, então fique à vontade para experimentar ...