Como definir o mapeamento em seus objetos com AutoMapper

Standard

No artigo anterior demonstrei como podemos mapear nossos objetos utilizando a biblioteca do AutoMapper. Como pode ser observado, antes de realizar o mapeamento, devemos definir como o mesmo será efetuado.

Exemplo:

//Define como o mapeamento será efetuado
Mapper.CreateMap<Grupo, Grupo_DTO>();

//Seleciona um objeto qualquer
Grupo g = _db.Grupos.FirstOrDefault();

//Efetua o mapeamento
Grupo_DTO grupoMapeado = Mapper.Map<Grupo, Grupo_DTO>(g);

Porém, arquiteturalmente falando, ficaria mais legível e elegante definirmos todas nossas configurações de mapeamento quando a aplicação é iniciada, desta forma posteriormente podemos apenas realizar efetivamente o mapeamento.

Veja um exemplo em uma aplicação com ASP.NET MVC:

Primeiramente irei criar uma classe do tipo static para a definição dos mapeamentos possíveis.

public static class AutoMapperConfiguracao
{
    public static void CriaMapeamentos()
    {
        Mapper.CreateMap<Grupo, Grupo_DTO>();

        Mapper.CreateMap<Produto, Produto_DTO>();

	Mapper.CreateMap<Pedido, Pedido_DTO>();

	Mapper.CreateMap<Usuario, Usuario_DTO>()
	      .ForMember(dest => dest.nomeTipo, ori => ori.MapFrom(src => src.Tipo.nome));
    }

}

Agora no arquivo Global.asax podemos chamar nossa classe no método Application_Start:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    AutoMapperConfiguracao.CriaMapeamentos();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
}

Pronto, agora podemos realizar efetivamente nossos mapeamentos sem a necessidade da definição dos mesmos.

//Seleciona um objeto qualquer
Grupo g = _db.Grupos.FirstOrDefault();

//Efetua o mapeamento
Grupo_DTO grupoMapeado = Mapper.Map<Grupo, Grupo_DTO>(g);

//Seleciona um objeto qualquer
Usuario u = _db.Usuarios.FirstOrDefault();

//Efetua o mapeamento
Usuario_DTO usuarioMapeado = Mapper.Map<Usuario, Usuario_DTO>(g);

 

Bom, era isso. 😉

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *