tôi đã đi qua cùng một vấn đề khi làm việc với AutoMapper, và @ Behnam-Esmaili là một câu trả lời hay nhưng nó có thể được cải thiện.
Bạn có thể triển khai phương thức mở rộng cho IMapperConfigurationExpression
sẽ thực hiện ánh xạ hai chiều này và cũng mong đợi hai tham số tùy chọn (Action<IMappingExpression<T, Y>>
) sẽ được sử dụng khi cố định cấu hình Ánh xạ cho cả hai loại.
public static class ModelMapper
{
private static readonly IMapper _mapper;
static ModelMapper()
{
var mapperConfiguration = new MapperConfiguration(config =>
{
config.CreateTwoWayMap<CustomerViewModel, Customer>(
secondExpression: (exp) => exp.ForMember((source) => source.CustomerEmail, opt => opt.MapFrom(src => src.Email)));
});
_mapper = mapperConfiguration.CreateMapper();
}
public static void CreateTwoWayMap<T, Y>(this IMapperConfigurationExpression config,
Action<IMappingExpression<T, Y>> firstExpression = null,
Action<IMappingExpression<Y, T>> secondExpression = null)
{
var mapT = config.CreateMap<T, Y>();
var mapY = config.CreateMap<Y, T>();
firstExpression?.Invoke(mapT);
secondExpression?.Invoke(mapY);
}
public static T Map<T>(object model)
{
return _mapper.Map<T>(model);
}
}
Triển khai ở trên là cách duy nhất để đạt được, tuy nhiên nó có thể được thiết kế khác nhau.
Nguồn
2017-02-20 16:38:14
Lưu ý rằng điều này bây giờ có thể được thực hiện "ra khỏi hộp" với tùy chọn 'ReverseMap'. – Mightymuke