2011-01-19 9 views
5

私はMetadataType属性を使用して、T4テンプレートを使用して生成するクラスに検証属性を追加しています。これは素晴らしく機能しますが、一部のプロパティでDefaultValue属性を使用できるようにしたいので、MetadataTypeクラスが自分のクラスをより完全に記述するようにします(そして、それらのクラスでOnCreatedメソッドを実装する必要がないようにします) 。 MetadataTypeクラスに属性を追加できますが、効果はありません。MetadataTypeAttributeの型として使用されるクラスのDefaultValueAttributeの使用

ここにいくつかのソースの例があります - 生成された部分は(もちろん)別のファイルにあります。私がWidgetオブジェクトをインスタンス化すると、Nameプロパティはnullになります。

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

問題を示す最小の実行可能なソースコードの例を提供してください。 –

+0

ええ、私は誰も何も情報源なしでそれを得るとは思わなかった。 –

答えて

3

WidgetMetaDataクラスにコンストラクタを追加し、そこにプロパティのデフォルト値を設定します。 DefaultValueAttributeは、Visual Studio Toolbox(私が思う)のために値が太字(変更)かどうか(デフォルト値)を決定するために使用されます。それでも、ある時点でプロパティの値を設定する必要があります。 DefaultValueAttribute

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

詳細情報:http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute(v=vs.71).aspx

関連する問題