2011-07-29 11 views
5

¿Hay alguna forma de acceder al nombre de Clase y Propiedad al que adjuntó una propiedad dentro del atributo?Acceso al nombre de clase y propiedad dentro de un atributo

Por ejemplo

public class User { 
    public string Email { get; set; } 
    public string FirstName { get; set; } 

    [MyAttrubute] 
    public string LastName { get; set; } 
} 

Y luego, en la clase MyAttribute

public class MyAttributeAttribute { 
    public MyAttributeAttribute() : base() { 
     string className = /*GET CLASS NAME - should return "User" */ 
     string propertyName = /*GET PROPERTY NAME - should return LastName*/ 
    } 
} 

Sé que puedo pasar de la información en el constructor, pero esperando que hay una manera fácil de alguna forma para ahorrar en el volver a escribir la información una y otra vez, ya sea a través de la reflexión o ...

Respuesta

7

Lo sentimos, pero eso no es posible. También podría tener

public class User { 
    public string Email { get; set; } 
    public string FirstName { get; set; } 

    [MyAttrubute] 
    public string LastName { get; set; } 
} 

[MyAttrubute] 
public class OtherClass { 

    [MyAttrubute] 
    public string AnotherProperty { get; set; } 
} 

El atributo se puede crear desde cualquier lugar. Incluso el siguiente es una forma válida para crear una instancia:

var att = new MyAttribute(); 

Su pregunta podría ser resumido en "¿Puedo detectar dónde está mi clase personalizada se crea una instancia de?". En mi último ejemplo, probablemente podría usarse StackTrace. Pero con atributos están siendo construidos por el tiempo de ejecución de .NET, por lo que no sería capaz de seguir esa ruta.

+1

No estoy seguro de seguir su razonamiento (aunque la respuesta general aún podría ser la misma). Cada atributo es su propia instancia de la clase MyAttribute, por lo que cada uno puede tomar un valor diferente en su constructor y almacenarlo localmente. El hecho de que pueda decorar propiedades múltiples no puede ser la razón por la que no puedo tomar la clase/propiedad decorada. Pensé que podría haber una forma en el tiempo de ejecución para determinar qué clase/propiedad se adjuntó esta instancia del atributo – Peter

+0

@Peter - Lo siento, aclaré mi respuesta. – CodeNaked

Cuestiones relacionadas