Использование DefaultValueatTribute в классе, который используется в качестве типа в метадататипоаттрибете

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

  •  12-10-2019
  •  | 
  •  

Вопрос

Я использовал атрибут метадататипа, чтобы добавить атрибуты проверки в классы, которые я генерирую, используя шаблон T4. Это работает чудесно, но я хотел бы иметь возможность использовать атрибут DefaultValue на некоторых свойствах, чтобы мой класс метадататипа более полностью описывал мои классы (и поэтому мне не придется реализовать метод на этих классах) в этих классах) Анкет Я могу добавить атрибут в свой класс метадататипа, но он не имеет никакого эффекта.

Вот какой -то пример источника - сгенерированная часть (конечно) (конечно) в другом файле. Если я создаю создание объекта виджета, свойство имени будет нулевым.

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