Извлечение имени источника AutoMapper из пользовательских карт через ForMember - PullRequest
3 голосов
/ 13 января 2011

Я успешно извлек простые пары источника / назначения из существующей карты типов Automapper, используя этот код:

private MemberInfo getSource(Type destinationType, string destinationPropertyname)
{
  TypeMap map = Mapper.GetAllTypeMaps()
                      .Where(m => m.DestinationType.Equals(destinationType))
                      .First();
  IEnumerable<PropertyMap> properties = 
      map.GetPropertyMaps()
         .Where(p => p.DestinationProperty
                      .Name
                      .Equals(destinationPropertyname, 
                              StringComparison.CurrentCultureIgnoreCase));
  PropertyMap sourceProperty = properties.First();
  IMemberGetter mg = sourceProperty.GetSourceValueResolvers()
                                   .Cast<IMemberGetter>()
                                   .First();

  return mg.MemberInfo;
}

Однако, когда я добавляю пользовательские сопоставления столбцов, как это:

Mapper.CreateMap<Customer, CustomerViewModel>()
      .ForMember(dest => dest.Cell, opt => opt.MapFrom(src => src.CellPhone))
      .ForMember(dest => dest.Email, opt => opt.MapFrom(src => src.EmailAddress));

... исходная часть сопоставления недоступна из GetSourceResolvers(), что я могу сказать.

Я ценю любые ваши рекомендации.

Спасибо.

-Джесси Хоул

1 Ответ

0 голосов
/ 01 августа 2011

Это то, что вы хотели?

var map = Mapper.FindTypeMapFor<Customer, CustomerViewModel>();

foreach( var propertMap in map.GetPropertyMaps() )
{
    var dest = propertMap.DestinationProperty.MemberInfo;
    var source = propertMap.SourceMember;
}
...