Exemplo utilizando AutoMapper e ASP.NET MVC

Como a própria página do AutoMapper fala, o automapper é um “mapeador” de objeto para objeto. Ou seja, ele facilita a sua vida quando você precisa mapear um objeto em outro.
Mas pq alguém iria querer mapear e converter um objeto em outro? Pq normalmente há conflitos entre o seu domínio e a sua view, ou do seu domínio para o seu serviço. Imagina que você possui uma viewmodel Usuário que possui os atributos necessários para a sua view, contendo todas as validações, etc. Ao enviar para o seu serviço, provavelmente você passará o objeto Usuário do seu domínio, e não o seu viewmodel, certo? Sem o automapper, você não teria muito o que fazer, além de provavelmente ter um método dentro da sua viewmodel que retorna o objeto de domínio, fazendo toda a conversão, teste, etc.
O AutoMapper entra ai para facilitar a sua vida, uma vez que você precisará praticamente de uma única linha de código para realizar o mapeamento.

Vamos criar um projeto MVC. Para adicionarmos o automapper ao nosso projeto, vá em Package Manager Console e digite:

Install-Package AutoMapper

Uma vez com nossas dependências adicionadas, vamos criar o nosso problema a ser resolvido. Vamos criar uma classe chamada Usuário que representará o nosso domínio e uma ViewModel Usuário que atenderá as nossas views.


// Nosso domínio
public class Usuario
{
    public string Nome { get; set; }
    public string Sobrenome { get; set; }
    public string Email { get; set; }
}


//Nossa ViewModel
public class UsuarioViewModel
{
    [StringLength(100)]
    [Display(Name = "Nome")]
    public string Nome { get; set; }

    [StringLength(100)]
    [Display(Name = "Sobrenome")]
    public string Sobrenome { get; set; }

    [StringLength(100)]
    [Display(Name = "Email")]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }
}

Agora precisamos configurar o mapeamento das classes para que o AutoMapper saiba como realizar o cast de uma para outra.

 AutoMapper.Mapper.CreateMap<Usuario, UsuarioViewModel>()
    .ForMember(dest => dest.Email, opt => opt.MapFrom(src => src.Email))
    .ForMember(dest => dest.Nome, opt => opt.MapFrom(src => src.Nome))
    .ForMember(dest => dest.Sobrenome, opt => opt.MapFrom(src => src.Sobrenome));

O que estamos fazendo aqui é dizendo para o AutoMapper que a classe UsuarioViewModel receberá os valores correspondentes descritos em ForMember. Note que por convenção, as propriedades com mesmo nome não precisam ser mapeadas. É importante falar também que o mapeamento é realizado em mão única, sendo:

AutoMapper.Mapper.CreateMap<Fonte, Destino>()

Logo, você poderá ser capaz apenas de obter a classe Destino a partir da classe Fonte. O contrário não seria possível desta maneira. Logo, precisaríamos do seguinte mapeamento para obter ida e volta:

AutoMapper.Mapper.CreateMap<A, B>()
AutoMapper.Mapper.CreateMap<B, A>()

Ou, case seu mapeamento siga as convenções, você pode também utilizar o ReveserMap

AutoMapper.Mapper.CreateMap<A, B>().ReverseMap();

Que nada mais é do que um atalho para gerar:

AutoMapper.Mapper.CreateMap<A, B>()
AutoMapper.Mapper.CreateMap<B, A>()

Eu coloquei uma aplicação simples no github com este exemplo. Você pode ver no link: https://github.com/ceb10n/automapper-example. Eu coloquei o mapeamento na classe MapConfig dentro de AppStart, e chamo em global.asax assim:

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

    WebApiConfig.Register(GlobalConfiguration.Configuration);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    AuthConfig.RegisterAuth();
    MapConfig.CreateAutoMapperMappings();
}

Bom, por hoje é só 😉
Abraço 😉

Anúncios

Um comentário sobre “Exemplo utilizando AutoMapper e ASP.NET MVC

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s