Что такое AutoMapper в .NET?

«Что такое AutoMapper в .NET?» — вопрос из категории C# Core, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

AutoMapper — это популярная библиотека объектно-объектного маппера для .NET, которая автоматизирует преобразование объектов одного типа в другой, избавляя разработчика от написания шаблонного кода для копирования свойств.

Основное назначение: Сопоставление моделей предметной области (Domain Models) с DTO (Data Transfer Objects), ViewModels, запросами и ответами API.

Базовый пример использования:

// Исходный и целевой классы
public class UserEntity
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}

public class UserDto
{
    public int Id { get; set; }
    public string FullName { get; set; }
    public string EmailAddress { get; set; }
}

// Конфигурация маппера (обычно в Startup/Program.cs)
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<UserEntity, UserDto>()
        .ForMember(dest => dest.FullName,
                   opt => opt.MapFrom(src => $"{src.FirstName} {src.LastName}"))
        .ForMember(dest => dest.EmailAddress,
                   opt => opt.MapFrom(src => src.Email));
});

IMapper mapper = config.CreateMapper();

// Использование
var userEntity = new UserEntity { Id = 1, FirstName = "Иван", LastName = "Иванов", Email = "ivan@mail.ru" };
UserDto userDto = mapper.Map<UserDto>(userEntity);
// userDto.FullName = "Иван Иванов", userDto.EmailAddress = "ivan@mail.ru"

Ключевые возможности:

  • Автоматическое сопоставление по совпадающим именам свойств.
  • Кастомные преобразования (ForMember, ConvertUsing).
  • Обработка коллекций (списков, массивов).
  • Вложенные объекты.
  • Интеграция с DI-контейнерами (регистрация как Singleton).

Преимущества:

  • Сокращает объем шаблонного, подверженного ошибкам кода.
  • Делает код чище и проще для поддержки.
  • Централизует логику преобразования в профилях (Profiles).

Недостатки и предостережения:

  • Производительность: Нагрузка при первой конфигурации; для высокопроизводительных сценариев ручной маппинг или Mapster могут быть быстрее.
  • «Магия»: Слишком сложная конфигурация может скрывать логику и усложнять отладку. Важно соблюдать баланс и использовать кастомные преобразования только там, где это необходимо.