在 v8.0 中将多个源自动映射到单个目标

Automapper multiple source to single target in v8.0

我是 .net core 3.1 中整个 Automapper 世界的新手,正在浏览文档和 SO,但无法从他们的最新版本 8.0 中找到适合我的用例的任何内容。

Borrowing from another SO post,我如何在新的 v8.0 配置中执行此操作?

public class People {
   public string FirstName {get;set;}
   public string LastName {get;set;}
}

public class Phone {
   public string Number {get;set;}
}

Convert to a PeoplePhoneDto like this:

public class PeoplePhoneDto {
    public string FirstName {get;set;}
    public string LastName {get;set;}
    public string PhoneNumber {get;set;}
}

我还会用这个吗?

Mapper.CreateMap<People, PeoplePhoneDto>();
Mapper.CreateMap<Phone, PeoplePhoneDto>()
        .ForMember(d => d.PhoneNumber, a => a.MapFrom(s => s.Number));

这是一个像下面这样的工作演示:

型号:

public class People
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Phone
{
    public string Number { get; set; }
}

public class PeoplePhoneDto
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhoneNumber { get; set; }
}

AutoMapper 配置文件:

public class AutoMapperProfile : Profile
{
    public AutoMapperProfile()
    {
        CreateMap<People, PeoplePhoneDto>();
        CreateMap<Phone, PeoplePhoneDto>()
             .ForMember(d => d.PhoneNumber, a => a.MapFrom(s => s.Number));
    }
}

Startup.cs:

services.AddAutoMapper(typeof(AutoMapperProfile));

控制器:

public class HomeController : Controller
{
    private readonly IMapper _mapper;
   
    public HomeController(IMapper mapper)
    {
        _mapper = mapper;
    }
    public IActionResult Index()
    {
        var people = new People() { FirstName = "aaa", LastName = "bbb" };
        var phone = new Phone() { Number = "12345" };
        var model = _mapper.Map<PeoplePhoneDto>(people); // map dto1 properties
        _mapper.Map(phone, model);

        //do your stuff...
        return View();
    }
}

结果: