我一直在使用元数据型属性将验证属性添加到使用T4模板生成的类中。这可以很好地工作,但是我希望能够在某些属性上使用默认值属性,以便我的元数据类别可以更完整地描述我的类(因此,我不必在这些类中实现发出的方法) 。我可以将属性添加到我的元数据类中,但没有效果。

这是一些示例来源 - 生成的部分(当然是)在另一个文件中。如果我实例化窗口小部件对象,则名称属性将为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工具箱(我相信)来确定该值是否应该是粗体(更改)(默认值)等。您仍然需要在某个时候设置属性的值。

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