Mit Hilfe der Default auf einer Klasse, die als Typ in einem MetadataTypeAttribute verwendet wird
-
12-10-2019 - |
Frage
Ich habe das MetadataType Attribut wurde unter Verwendung von Validierungs Attribute Klassen hinzufügen Ich bin Erzeugung einer T4-Vorlage. Das funktioniert wunderbar, aber ich möchte in der Lage sein, das Defaultattribut auf einigen Eigenschaften zu verwenden, so dass meine MetadataType Klasse wird mehr vollständig meine Klassen beschreiben (und so, dass ich nicht die OnCreated Methode in diesen Klassen implementieren muß) . Ich kann das Attribut auf meine MetadataType Klasse hinzufügen, aber es hat keine Wirkung.
Hier einige Beispielquelle - das erzeugte Teil (natürlich) ist in einer anderen Datei. Wenn ich ein Widget-Objekt instanziiert, wird die Name-Eigenschaft null sein.
/// <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; }
}
Was mache ich falsch ?, oder ist dies nicht unterstützt (und wenn ja, ist es dokumentiert überall?)
Lösung
einen Konstruktor der WidgetMetaData
Klasse hinzufügen und den Standardwert der Eigenschaft es ist gesetzt. Die DefaultValueAttribute
ist für das Visual Studio Toolbox (glaube ich), um zu bestimmen, ob der Wert fett sein sollte (geändert) oder nicht (Standardwert), unter anderem. Sie müssen noch den Wert der Immobilie zu einem bestimmten Zeitpunkt setzen.
public WidgetMetaData()
{
Name = "Default Value";
}
Weitere Informationen über die DefaultValueAttribute
: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute (v = vs.71) aspx