Generic Automapper MappingProfile регистрация - PullRequest
0 голосов
/ 19 декабря 2018

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

Вот что я пробовал.Не могу понять, как реализовать метод HasProperty и установить свойство выражения lamba .[prop]

public class Person
{
   public string ID{get;set;}
   public string Name{get;set;}
   public DateTime Birth{get;set;}

   public class _Profile:AutoMapper.Profile{
     public _Profile(){
       /*traditional way*/
        CreateMap<Person, PersonDTO>()
        .ForMember(dest => dest.ID, opt => opt.MapFrom(src => src.ID))
         /*omitted for brevity*/
        .ReverseMap();
           /*  Generic way*/
            BaseModelMappingConfigurator
            .RegisterBaseModelMap(CreateMap<Person, PersonDTO>,true);
     }
   }
}

, вот реализация RegisterBaseModelMap метода

     public static void RegisterBaseModelMap<TSource, TDestination>
              (Func<IMappingExpression<TSource, TDestination>> createMap, 
     bool reverse = true)
    {
        var mapCreator = createMap();
        var properties = typeof(TSource)
     .GetProperties(System.Reflection.BindingFlags.Public | 
                       System.Reflection.BindingFlags.DeclaredOnly);
     foreach (var prop in properties)
        {
            if (typeof(TDestination).HasProperty(prop))
            {
                mapCreator.ForMember(dest => dest.[prop], 
                opt => opt.MapFrom(src => src.[prop]));
            }
        }
        if (reverse) mapCreator.ReverseMap();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...