Nota: Esto es una continuación de answer en un previous question.Utilice la reflexión para obtener el atributo de una propiedad a través del método llamado desde el colocador
estoy decorando seleccionador de propiedades con un atributo llamado TestMaxStringLength
que se utiliza en el método llamado de la incubadora para su validación.
La propiedad actualmente tiene el siguiente aspecto:
public string CompanyName
{
get
{
return this._CompanyName;
}
[TestMaxStringLength(50)]
set
{
this.ValidateProperty(value);
this._CompanyName = value;
}
}
pero preferiría que tener este aspecto:
[TestMaxStringLength(50)]
public string CompanyName
{
get
{
return this._CompanyName;
}
set
{
this.ValidateProperty(value);
this._CompanyName = value;
}
}
El código para ValidateProperty
que se encarga de buscar los atributos del colocador es :
private void ValidateProperty(string value)
{
var attributes =
new StackTrace()
.GetFrame(1)
.GetMethod()
.GetCustomAttributes(typeof(TestMaxStringLength), true);
//Use the attributes to check the length, throw an exception, etc.
}
¿Cómo puedo cambiar elCódigopara buscar atributos en la propiedad en lugar del conjunto método?
Ooh. Me gusta mucho este enfoque desde una perspectiva de codificación. Por supuesto, la decoración del atributo es inútil a menos que se implemente la validación, que es un poco más difícil de asumir en este modelo, pero en general debería ser más rápido y más limpio. –
¿podría decirme cómo validar el valor contra atts? ¡Gracias! – VladL