C# аннотация данных, не может расширить указанный атрибут c - каковы возможности? - PullRequest
0 голосов
/ 28 апреля 2020

Я работаю над устаревшей сборкой приложений с ASP. NET Dynami c Data. Все модели, как обычно, доступны только для чтения, и можно задать отображаемое имя или описание с помощью атрибутов.

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

Код, который был раньше, был чистым, потому что мы только запрашивали ресурсы:

[Display(ResourceType = typeof(Resources.m_Res), Name = "M_RES_MIMETYPE_ID", Description = "M_RES_MIMETYPE_ID_DESCR")]

Это было совершенно нормально и работало как задумано , Однако теперь мне нужно сначала получить отображаемое имя и описание из какого-то другого файла, и, если ничего не помогает, я должен вернуться к ресурсам.

Мне пришлось создать два разных пользовательских атрибута, что-то вроде этого:

    public class MGADisplayName : DisplayNameAttribute
    {
          private readonly string propertyName;
          public string Name { get; set; }
          public Type TableName { get; set; }
          public Type ResourceType { get; set; }

          public MGADisplayName([CallerMemberName] string PropertyName = null)
          {
              propertyName = PropertyName;
          }

          public override string DisplayName
          {
              get
              {
                  var key = (TableName.Name + ":" + (propertyName ?? Name)).ToLower();
                  if (/* SOME QUERYING */)
                  {
                      return QUERY[key];
                  }
                  else
                  {
                      string property = Resources.m_Res.ResourceManager.GetString(Name);
                      if (property != null)
                      {
                          return property;
                      }
                      else
                      {
                          return Name;
                      }

                  }
              }
          }
    }

Такого рода работы, и я думаю, что пока все нормально, но следующая проблема касается угол: мне нужно сделать с Display.GroupName то же самое.

Теперь, насколько я знаю, нет атрибута GroupNameAttribute для расширения, так что я здесь как бы в неведении.

Я мог бы sh Я мог бы расширить DisplayAttribute, это было бы ТОЧНО то, что мне нужно, но класс запечатан, так что это тупик.

Я буду sh Я мог бы изменить модель на лету и предоставьте DisplayName и Description через сеттеры, но модель имеет только геттеры, так что это еще один тупик.

У меня медленно заканчиваются варианты. Что еще можно сделать здесь?

...