Я работаю над созданием старого приложения с ASP.NET Dynamic 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 для расширения, так что я вроде как в темноте.
Хотел бы я продлить DisplayAttribute, это было бы ИСКЛЮЧИТЕЛЬНО то, что мне нужно, но класс запечатан, так что это тупик.
Я бы хотел изменить модель на лету и предоставить DisplayName и Description через сеттеры, но у модели есть только геттеры, так что это еще один тупик.
У меня тут медленно заканчиваются варианты. Что еще здесь можно сделать?