Metadatatypeattributeのタイプとして使用されるクラスでDefaultValueAttributeを使用する

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

  •  12-10-2019
  •  | 
  •  

質問

Metadatatype属性を使用して、T4テンプレートを使用して生成しているクラスに検証属性を追加しています。これは素晴らしく機能しますが、一部のプロパティでdefaultValue属性を使用できるようにしたいので、メタデータタイプのクラスが私のクラスをより完全に説明します(そして、それらのクラスで作成されたメソッドを実装する必要がないようにします) 。メタデータタイプのクラスに属性を追加できますが、効果はありません。

いくつかの例のソースを次に示します - 生成された部分は(もちろん)別のファイルにあります。ウィジェットオブジェクトをインスタンス化すると、名前プロパティは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; }
}

私は何が間違っているのですか?、それともサポートされていません(もしそうなら、それはどこにでも文書化されていますか?)

役に立ちましたか?

解決

にコンストラクターを追加します WidgetMetaData クラスとプロパティのデフォルト値をそこに設定します。 DefaultValueAttribute Visual Studio Toolbox(私は信じています)に使用され、値が太字であるか(デフォルト値)(デフォルト値)であるかどうかを判断します。ある時点で、プロパティの価値を設定する必要があります。

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

の詳細 DefaultValueAttribute: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultValueAttribute(v=vs.71).aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top