Di programmazione aggiungere un attributo a un metodo o parametro
-
25-09-2019 - |
Domanda
posso usare TypeDescriptor.AddAttributes per aggiungere un attributo a un tipo in fase di esecuzione. Come faccio a fare lo stesso per un metodo e parametri? (Forse 2 domande distinte ...)
Soluzione
TypeDescriptor.AddAttributes
colpisce solo una molto specifici casi d'uso; cioè dall'interno System.ComponentModel
. Per il riposare di riflessione, si sa non sull'attributo supplementare. E in effetti, System.ComponentModel
in realtà non si applica ai metodi o parametri.
Così, in breve; non si può. Sarà necessario memorizzare queste informazioni da qualche altra parte (su misura), o aggiungerlo a tempo di compilazione.
Altri suggerimenti
Per come la vedo da analizzare la classe TypeDescriptor
in Reflector, il metodo .AddAttributes
chiama internamente il metodo .AddProvider
. L'istanza TypeDescriptionProvider
passato alla realtà è responsabile della fornitura di meta-dati. Si potrebbe provare ad aggiungere l'attributo [TypeDescriptionProviderAttribute] alla classe e implementare il proprio fornitore derivando dalla classe TypeDescriptionProvider
. Come dice la documentazione, sovrascrivendo TypeDescriptionProvider.CreateInstance
, si potrebbe fornire un oggetto sostitutivo cui tipo ha tutti gli attributi necessari. Ho il sospetto che gli attributi applicati ai metodi all'interno del tipo di sostituzione avranno effetto. Tuttavia, non ho provato io stesso, quindi sentitevi liberi di sperimentare ...