В AutoMapper можно определить, какое имя конечного свойства будет для определенного исходного свойства - PullRequest
3 голосов
/ 30 августа 2010

Примечание: вопрос относится к метаданным отображения, а не к отображенным значениям. то есть как ИМЯ целевого сопоставленного свойства, а не сопоставленного значения.

Справочная информация: Я использую MVC 2 с автоматом для сопоставления между объектами домена и просмотра моделей. У меня есть некоторые правила валидации на уровне домена, которые определены в модели предметной области, и некоторые более специфичные для пользовательского интерфейса правила валидации, определенные в моделях представления с использованием аннотаций данных. В интересах сохранения СУХОГО я не хочу повторять правила проверки моего домена в моделях представления. Вместо этого я хотел бы иметь возможность сопоставлять имена свойств в модели домена с соответствующими им именами свойств в моделях представления, используя информацию о сопоставлении, которую я уже настроил в AutoMapper. После этого ошибки проверки домена будут добавлены в ModelState с помощью ModelState.AddModelError () для отображения в представлении.

Имена свойств в сообщениях проверки должны совпадать, чтобы MVC мог отображать сообщение рядом с правильным элементом управления в форме.

1 Ответ

0 голосов
/ 30 августа 2010
Mapper.GetAllTypeMaps()
  .First(x=>x.SourceType==typeof(CustomType))
  .DestinationType.Name

Не проверено, «работает» только на уровне 1 лвл и, скорее всего, просто не работает. Но может дать несколько идей:

 public static string Get<T,TProp>(this T o,Expression<Func<T,TProp>> prop){
      var pn=((MemberExpression)prop.Body).Member.Name;
      var dt=Mapper.GetAllTypeMaps()
        .First(x=>x.SourceType==typeof(T));
      var pmaps=dt.GetPropertyMaps();
      var dpmap=pmaps.First(x=>x.DestinationProperty.Name==pn);
      return string.Format("{0}.{1}", //hyper dirty lol
        dt.DestinationType.Name,dpmap.DestinationProperty.Name);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...