Uso de la DefaultValueAttribute en una clase que se utiliza como el tipo en un MetadataTypeAttribute

StackOverflow https://stackoverflow.com/questions/4741909

  •  12-10-2019
  •  | 
  •  

Pregunta

He estado usando el atributo MetadataType añadir atributos de validación para las clases que estoy de generación que utilicen una plantilla T4. Esto funciona de maravilla, pero me gustaría ser capaz de utilizar el atributo DefaultValue sobre algunas propiedades, por lo que mi clase MetadataType describirá más completamente mis clases (y por lo que no voy a tener que implementar el método OnCreated en esas clases) . Puedo agregar el atributo a mi clase MetadataType, pero no tiene ningún efecto.

Aquí hay alguna fuente de ejemplo - la parte generada es (por supuesto) en un archivo diferente. Si una instancia de un objeto de widgets, la propiedad Name será nulo.

/// <summary>
/// This part is generated
/// </summary>
public partial class Widget
{
    public string Name { get; set; }
}

/// <summary>
/// This part is hand-coded so I can add attributes, custom methods etc.
/// </summary>
[System.ComponentModel.DataAnnotations.MetadataType(typeof(WidgetMetadata))]
public partial class Widget
{
}

/// <summary>
/// This part is hand-coded, and any validation attributes I add work fine.
/// </summary>
public class WidgetMetadata
{
        [System.ComponentModel.DefaultValue("Default Name")]
        [StringLengthValidator(0, RangeBoundaryType.Inclusive, 320, RangeBoundaryType.Inclusive, Tag = "Invalid string length", MessageTemplate = "{1} must contain between \'{3}\' to \'{5}\' characters.")]
        public string Name { get; set; }
}

¿Qué estoy haciendo mal ?, o se trata no está soportada (y si es así se documenta en cualquier lugar?)

¿Fue útil?

Solución

Añadir un constructor para la clase WidgetMetaData y establecer el valor predeterminado de la propiedad allí. El DefaultValueAttribute se utiliza para el Estudio de la caja de herramientas Visual (creo) para determinar si el valor debe estar en negrita (cambiado) o no (valor por defecto), entre otras cosas. Todavía es necesario establecer el valor de la propiedad en algún momento.

public WidgetMetaData() 
{
    Name = "Default Value";
}

Más información sobre el DefaultValueAttribute: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute (v = vs.71) .aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top