2009-05-27 18 views
9

Necesito encontrar el tipo de propiedad a la que se aplica un atributo personalizado desde el atributo personalizado.¿Cómo obtengo la propiedad que pertenece a un atributo personalizado?

Por ejemplo:

[MyAttribute] 
string MyProperty{get;set;} 

Dada la instancia de MyAttribute, cómo podría conseguir un descriptor Tipo de MyProperty?

En otras palabras, yo estoy buscando lo contrario de System.Type.GetCustomAttributes()

+2

Será mejor que diga lo que está tratando de hacer, porque lo que está preguntando no es posible. –

Respuesta

16

El atributo en sí mismo no sabe nada sobre el objeto que se decoró con él. Pero podría inyectar esta información en el momento de recuperar el atributo.
En algún momento debe recuperar la propiedad utilizando un código similar al siguiente.

PropertyInfo propertyInfo = typeof(MyType).GetProperty("MyProperty"); 

Object[] attribute = propertyInfo.GetCustomAttributes(typeof(MyAttribute), true); 

if (attribute.Length > 0) 
{ 
    MyAttribute myAttribute = (MyAttribute) attributes[0]; 

    // Inject the type of the property. 
    myAttribute.PropertyType = propertyInfo.PropertyType; 

    // Or inject the complete property info. 
    myAttribute.PropertyInfo = propertyInfo; 
} 
+1

Nota completa para leer la mente :-) –

+0

Necesitaba esto para mi problema y encontré [otra solución aquí] (https://stackoverflow.com/questions/4879521/how-to-create-a-custom-attribute-in -c-sharp/44595783 # answer-4879579). Exploré esto y publiqué una respuesta para acceder a un atributo personalizado en una propiedad y no en una clase también. ¡Gracias por cierto! – Hopper

4

El atributo personalizado no sabe nada sobre el elemento atribuido por lo que no creo que lo que desea es posible hacer a menos que enumere todos los tipos en su sistema y verifique si contienen dicho atributo.

Cuestiones relacionadas