English version

Автоматический маппинг объектов в .NET — Emitmapper

Главным отличием EmitMapper от AutoMapper по заявлению разработчиков заключается в использовании механизма Reflection Emit. Этот механизм позволяет строить IL-код на лету использовать его. В результате EmitMapper работает на несколько порядков быстрее.

Разработчики EmitMapper написали простенький benchmark, в котором они сравнивают работу EmitMapper, AutoMapper и маппинг объектов руками. Вот что у них получилось на тестовом прогоне:

Цифры говорят сами за себя и показывают причину, почему стоит рассмотреть также и EmitMapper.

Несмотря на разницу в подходах, AutoMapper и EmitMapper очень похожи в идеологии. Обе библиотеки выполняют маппинг одного объекта в другой.

Чтобы работать с EmitMapper, установим в проект библиотеку:

Install-Package EmitMapper

Основным объектом, с которым мы будем работать - ObjectMapperManager.

Используем для работы всё те же объекты

public class UserDto
{
  public string FirstName { get; set; }

  public string LastName { get; set; }

  public string Email { get; set; }

}

public class User
{
  public string FullName { get; set; }

  public string Email { get; set; }
}

Настроим конфигурацию:

DefaultMapConfig config = new DefaultMapConfig();
config.ConvertUsing((UserDto source) =>
  new User
  {
      FullName = source.FirstName + " " + source.LastName,
      Email = source.Email
  });

Тогда маппинг можно выполнить так:

var user = ObjectMapperManager
  .DefaultInstance
  .GetMapper<UserDto, User>(config)
  .Map(new UserDto
  {
      FirstName = "Ivan",
      LastName = "Ivanov",
      Email = "ivan@ivanon.ru"
  });

Как видно, синтаксис предельно похож на синтаксис AutoMapper’а.

На практике, лучше всего создать слой абстракции, чтобы не зависеть от конкретной реализации маппера.

Ссылки по теме

  1. Официальный сайт библиотеки Emitmapper
Автоматические запросы CodeReview в TFS 2013 ← → Как настроить собственный Nuget-сервер

Похожие публикации

Добавить комментарий

Для отображения аватара испольузется Gravatar
Можно форматрировать текст при помощи Markdown