Застосувати спеціальні атрибути до властивостей програмним шляхом

Я витрачаю API бізнес-об'єктів, де я не маю доступу до коду. Я використовую ці об'єкти безпосередньо на моїх переглядах бритви та хочу, щоб вони мали змогу застосувати мої власні атрибути DisplayName після того, як об'єкти були створені в інстанціях.

Отже, замість цього:

[DisplayName("First Name")]
public string GivenName;

Я хотів би зробити:

Profile.GivenName.DisplayName("FirstName");

Я розумію, як створювати спеціальний атрибут, але у мене виникають проблеми, роблячи їх програмними.

Як тільки я зможу це зробити, я можу застосувати більше моїх даних анонімів.

1

2 Відповіді

Чому б не вивести клас із бізнес-об'єкта та не використовувати Атрибут MetaDataType ?

[MetadataType(typeof(IMyAttributes))
public DerivedClass : BusinessClass
{
}

public interface IMyAttributes
{
  [Required]
  public string Name { get; set; }
}
2
додано
так, ви можете застосувати атрибути на інтерфейсі та на властивості інтерфейсу.
додано Автор Erik Philips, джерело
Це, безумовно, шлях, якщо типи не запечатані.
додано Автор Paul Tyng, джерело
Це гарна ідея. Я намагався уникнути створення додаткового шару, але ідея інтерфейсу є хорошою. Тоді я зможу застосувати спеціальні атрибути до інтерфейсу?
додано Автор Arnej65, джерело

Ви можете створити свій власний ModelMetadataProvider і шукати метадані з іншого джерела.

See the abstract class here: http://msdn.microsoft.com/en-us/library/system.web.mvc.modelmetadataprovider.aspx

Провайдер за замовчуванням використовує DataAnnotations, але ви могли б так само легко написати той, який дивиться на базу даних SQL або файл xml або щось подібне.

0
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug