在用作MetadataTypeAttribute中的类型的类上使用DefaultValueAttribute

时间:2011-01-19 23:15:38

标签: c# .net-4.0 metadatatype

我一直在使用MetadataType属性将验证属性添加到使用T4模板生成的类中。这非常有效,但是我希望能够在某些属性上使用DefaultValue属性,这样我的MetadataType类将更完整地描述我的类(因此我不必实现OnCreated方法)在那些课程中)。我可以将该属性添加到我的MetadataType类,但它没有任何效果。

这是一些示例源 - 生成的部分(当然)在不同的文件中。如果我实例化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; }
}

我做错了什么?或者这是不支持的(如果在任何地方都有记录?)

1 个答案:

答案 0 :(得分:3)

WidgetMetaData类添加构造函数,并在那里设置属性的默认值。 DefaultValueAttribute用于Visual Studio工具箱(我相信)以确定值是否应该是粗体(已更改)或不是(默认值)等。您仍需要在某个时刻设置属性的值。

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

有关DefaultValueAttributehttp://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute(v=vs.71).aspx

的更多信息