Conditionally mapping one source type to two destination types

后端 未结 4 797
遇见更好的自我
遇见更好的自我 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:34

    With automapper you must specify return type on invocation mapper eg. mapper.Map(member), this tells that return type is PersonMember so you can't return CompanyMember.

    You can do something like this:

    var configPerson = new MapperConfiguration(cfg => cfg.CreateMap());
    var configCompany = new MapperConfiguration(cfg => cfg.CreateMap());
    
    PersonMember personMember = null;
    CompanyMember companyMember = null;
    
    switch (member.MemberType )
    {
        case "PersonMember":
            var mapper = configPerson.CreateMapper();
            personMember = mapper.Map(member);
            break;
        case "CompanyMember":
            var mapper = configCompany.CreateMapper();
            companyMember = mapper.Map(member);
            break;
        default:
            throw new Exception("Unknown type");
            break;
    }
    

    Or you can try Custom type converters with object as return type.

提交回复
热议问题