2011-01-19 6 views
5

'da tür olarak kullanılan bir sınıfta DefaultValueAttribute kullanarak, bir T4 şablonu kullanarak oluşturduğum sınıflara doğrulama öznitelikleri eklemek için MetadataType özniteliğini kullanıyorum. Bu harika çalışır, ancak bazı özelliklerdeki DefaultValue özniteliğini kullanabilmeyi isterim, böylece MetadataType sınıfım sınıflarımı tamamen açıklar (ve böylece bu sınıflarda OnCreated yöntemini uygulamak zorunda kalmayacağım). . Özniteliği MetadataType sınıfıma ekleyebilirim, ancak hiçbir etkisi yoktur.Bir MetadataTypeAttribute

İşte bazı örnek kaynak - oluşturulan bölüm (tabii ki) farklı bir dosyada. Bir Widget nesnesini başlatırsam, Name özelliği boş olacaktır.

/// <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; } 
} 

+2

sorunu gösteriyor asgari yaşayabilir kaynak kod örneği sağlayın. –

+0

Evet, kimsenin bunu bir kaynak olmadan alacağını düşünmemiştim. –

cevap

3

WidgetMetaData sınıfa bir kurucu ekleyin ve orada özelliğinin varsayılan değeri yanlış yapıyor ?, ya bu desteklenmiyor (ve eğer öyleyse her yerde belgelenmiştir?) Ben ne. DefaultValueAttribute, Visual Studio Toolbox için (inanıyorum) değerin, diğer şeylerin yanı sıra, kalın (değiştirilmiş) olup olmadığını (varsayılan değer) belirlemek için kullanılır. Hala bir noktada mülkün değerini ayarlamanız gerekiyor. DefaultValueAttribute üzerinde

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

fazla bilgi: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute(v=vs.71).aspx