Я работаю над устаревшей сборкой приложений с 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 через сеттеры, но модель имеет только геттеры, так что это еще один тупик.
У меня медленно заканчиваются варианты. Что еще можно сделать здесь?