.net core中使用Automapper

Jonny Lin發表於2019-05-24

安裝所需的包

Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection

配置AutoMapper

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
}

新增測試模型

public class QueueInfo
{
    public string Id { get; set; }

    public string QueueNumber { get; set; }

    public DateTime CreateTime { get; set; }
    
}
public class QueueInfoCreateDto
{
    public string Id { get; set; }

    public string QueueNumber { get; set; }

    public DateTime CreateTime { get; set; }
}

建立使用者自定義Profile進行對映配置

public class QueueProfile:Profile
{
   public QueueProfile()
    {
        CreateMap<QueueInfo, QueueInfoCreateDto>().ReverseMap();
    }
}

ReverseMap表示雙向對映。具體還有很多相關的api,詳情可以進行官網檢視。

進行測試

public class ValuesController : ControllerBase
{
    //註冊IMapper
    private readonly IMapper _mapper;
    public ValuesController(IMapper mapper)
    {
        _mapper = mapper;
    }
    // GET api/values
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        QueueInfo info = new QueueInfo
        {
            Id = Guid.NewGuid().ToString(),
            CreateTime = DateTime.Now,
            QueueNumber = "123456789"
        };
        var dto = _mapper.Map<QueueInfoCreateDto>(info);
        return Ok(dto);
    }
}

集合之間也可以進行對映。其他擴充請檢視官網進行學習。

Automapper還可以在命名上進行自動轉換。

例如

public class QueueInfo
{
    public string Id { get; set; }

    public string QueueNumber { get; set; }

    public DateTime CreateTime { get; set; }
    
    public QueueItem QueueItem { get; set; }
}

public class QueueItem
{
    public string Id { get; set; }

    public string Name { get; set; }
}

public class QueueInfoCreateDto
{
    public string Id { get; set; }

    public string QueueNumber { get; set; }

    public DateTime CreateTime { get; set; }

    /// <summary>
    /// 這裡使用的是QueueInfo中的QueueItem物件下的Name。進行對映的時候會自動對映
    /// </summary>
    public string QueueItemName { get; set; }
}

相關文章