AutoMapper 4, один и тот же исходный и целевой класс, но используются разные исходные поля в зависимости от целевого дочернего объекта - PullRequest
0 голосов
/ 11 октября 2019

Я отображаю плоский объект на сложный объект, и у сложного объекта есть дочерние объекты того же класса. Как мне сказать AutoMapper использовать другую карту от класса плоского объекта до дочернего класса в зависимости от того, какой дочерний элемент сложного объекта. Посмотрите пример кода, где плоский объект имеет два адреса, а сложный объект имеет два объекта адреса (один и тот же класс), но каждому необходимо использовать разные поля исходного объекта.

Существует решение, при котором можно сначала использовать одинКонфигурация AutoMaper для первоначального сопоставления одного адреса, затем мы переключаемся на другие конфигурации AutoMapper для сопоставления второго адреса. Тем не менее, объект Mapper вводится, и это не является жизнеспособным решением.

public class FlatObject
{
    public string OwnerName;
    public string OwnerAddress1;
    public string OwnerAddress2;
    public string OwnerCity;
    public string OwnerZip;
    public string PartnerName;
    public string PartnerAddress1;
    public string PartnerAddress2;
    public string PartnerCity;
    public string partnerZip;
    public string CompanyName;

}
public class ComplexObject
{
    public string OwnerName;
    public Address OwnerAdress;
    public string PartnerName;
    public Address PartnerAddress;
    public string CompanyName;
}
public class Address
{
    public string Address1;
    public string Address2;
    public string City;
    public string zip;
}

public class SampleProfile : Profile
{
    protected override void Configure()
    {
        CreateMap<FlatObject, Address>()
            .ForMember(m => m.Address1, o => o.MapFrom(src =>     src.OwnerAddress1))
            .ForMember(m => m.Address2, o => o.MapFrom(src => src.OwnerAddress2))
            .ForMember(m => m.City, o => o.MapFrom(src => src.OwnerCity))
            .ForMember(m => m.zip, o => o.MapFrom(src => src.OwnerZip));

        CreateMap<FlatObject, ComplexObject>()
            .ForMember(m => m.OwnerName, o => o.MapFrom(src => src.OwnerName))
            .ForMember(m => m.PartnerName, o => o.MapFrom(src => src.PartnerName))
            .ForMember(m => m.CompanyName, o => o.MapFrom(src => src.CompanyName))
            .ForMember(m => m.OwnerAdress, o => o.MapFrom(src => src))
            .ForMember(m => m.PartnerAddress, ?????);
    }
}
...