Вот пример того, как это работает сейчас:
[MetadataType(typeof(PersonMetadata))]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public class PersonMetadata
{
[Required]
public string Name { get; set; }
[Range(0,150]
public int Age { get; set; }
}
Однако я не хочу, чтобы атрибут MetadataAttribute помещался в класс Person, вместо этого я хочу как-то сказать структуре MVC: "Эй, если вы встретите класс Person, метадат находится в классе PersonMetadata".
Это просто изменение направления, которое для меня кажется более композиционным, и я следую принципу Open-Close, поскольку мне не нужно прикасаться к классу Person, чтобы «расширять» его метаданными.
Я знаю, что это создает проблему возможного присоединения нескольких и противоречивых метаданных, а также увеличивает сложность, но гибкость всегда имеет свою цену.
Я хочу либо программным, либо декларативным способом, либо желательно и тем и другим:)
Так что может быть что-то вроде:
MetadataTypeMappings.Add(typeof(Person), typeof(PersonMetadata));
Другое может быть:
[MetadataFor(typeof(Person)]
public class PersonMetadata
{
[Required]
public string Name { get; set; }
[Range(0,150]
public int Age { get; set; }
}