Conditionally mapping one source type to two destination types

后端 未结 4 822
遇见更好的自我
遇见更好的自我 2020-12-20 01:15

I have a source DTO like this

public class Member 
{
    public string MemberId {get;set;}
    public string MemberType {get;set;}
    public string Name {g         


        
4条回答
  •  忘掉有多难
    2020-12-20 01:36

    Introduce some base class Member. Inherit PersonMember, CompanyMember from the new base class.

    Then define these mappings:

    cfg.CreateMap()
        .ConstructUsing((memberDto, context) => {
        switch (memberDto.MemberType)
        {
            case "PersonMember":
                return context.Mapper.Map(memberDto);
            case "CompanyMember":
                return context.Mapper.Map(memberDto);
            default:
                throw new ArgumentOutOfRangeException($"Unknown MemberType {memberDto.MemberType}");
        }
    });
    
    cfg.CreateMap()
        .ForMember(dest => PersonMember.PersonMemberId,
                   opt => opt.MapFrom(src => src.MemberId));
    
    cfg.CreateMap()
        .ForMember(dest => CompanyMember.CompanyMemberId,
                   opt => opt.MapFrom(src => src.MemberId));
    

    Now you can map using _mapperInstance.Map(memberDto);

提交回复
热议问题