私は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; }
}
私が間違って何をやっている?、またはこれはサポートされていません(ので、それがどこかに文書化されている場合?)
問題を示す最小の実行可能なソースコードの例を提供してください。 –
ええ、私は誰も何も情報源なしでそれを得るとは思わなかった。 –