2010-03-07 22 views
14

Puedo usar TypeDescriptor.AddAttributes para agregar un atributo a un tipo en tiempo de ejecución. ¿Cómo hago lo mismo para un método y parámetro? (tal vez 2 preguntas separadas ...)Agregar un atributo mediante programación a un método o parámetro

+0

¿En qué situaciones desea que aparezcan los atributos? – SLaks

+0

Para la reflexión, por lo tanto noté incluso que TypeDescriptor.AddAttribute no funciona para eso. – MatteS

Respuesta

17

TypeDescriptor.AddAttributes solo afecta a muy specific use-case; es decir, desde dentro de System.ComponentModel. Para el resto de reflexión, sabe nada sobre el atributo adicional. Y, de hecho, System.ComponentModel realmente no se aplica a los métodos o parámetros.

Así que en resumen; no puedes Tendrá que almacenar esta información en otro lugar (a medida), o agregarla en tiempo de compilación.

+0

Aha, gracias por la información. – MatteS

+0

@Mark Gravell, Cualquier solución para agregar propiedad-metadatos en un proyecto de Silverlight (donde 'TypeDescriptor' y' TypeDescriptionProvider' no están implementados? – Shimmy

+0

@Shimmy no tan lejos como yo sé, no –

0

Como veo al analizar la clase TypeDescriptor en Reflector, el método .AddAttributes llama internamente al método .AddProvider. La instancia TypeDescriptionProvider que se le transfirió es en realidad responsable de proporcionar los metadatos. Podría intentar agregar el atributo [TypeDescriptionProviderAttribute] a su clase e implementar su propio proveedor derivando de la clase TypeDescriptionProvider. Como dice la documentación, anulando TypeDescriptionProvider.CreateInstance, podría proporcionar un objeto sustituto cuyo tipo tenga todos los atributos necesarios. Sospecho que los atributos aplicados a los métodos dentro del tipo de sustitución también tendrán efecto. Sin embargo, no lo he intentado yo mismo, así que siéntase libre de experimentar ...

Cuestiones relacionadas