AutoMapper — це потужна бібліотека для C#, яка спрощує процес відображення об'єктів. Незалежно від того, чи ви працюєте з складними DTO, моделями представлення (view models) або доменними моделями, AutoMapper зменшує обсяг повторюваного та схильного до помилок коду для ручного відображення.
У цьому блозі ми розглянемо основи використання AutoMapper, включаючи установку, конфігурацію та поширені варіанти використання.
Чому варто використовувати AutoMapper?
Ручне відображення властивостей між об'єктами може призвести до:
- Нудного та повторюваного коду.
- Підвищеного ризику помилок, особливо при роботі з великими об'єктами.
- Труднощів у підтримці, коли моделі змінюються.
AutoMapper усуває цей шаблонний код, надаючи відображення об'єктів на основі конвенцій. Він автоматично відображає властивості за їх іменами та типами, що робить ваш код чистішим та більш підтримуваним.
Встановлення AutoMapper
Щоб розпочати роботу з AutoMapper, встановіть його через менеджер пакетів NuGet:
Install-Package AutoMapper
Або за допомогою .NET CLI:
dotnet add package AutoMapper
Також можна встановити AutoMapper.Extensions.Microsoft.DependencyInjection
, якщо ви використовуєте впровадження залежностей (Dependency Injection).
Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection
Налаштування AutoMapper
Щоб використовувати AutoMapper, необхідно:
- Створити профіль відображення.
- Ініціалізувати маппер.
1. Створення профілю відображення
Профіль визначає конфігурацію відображення. Ось приклад відображення між сутністю User
та UserDTO
:
public class MappingProfile : AutoMapper.Profile
{
public MappingProfile()
{
CreateMap<User, UserDTO>().ReverseMap();
CreateMap<UserDetails, UserDetailsDTO>().ReverseMap();
}
}
2. Ініціалізація AutoMapper
Якщо ви використовуєте впровадження залежностей (DI), налаштуйте AutoMapper у файлі Startup.cs
або Program.cs
:
public static class AddDependencyInjection
{
public static IServiceCollection AddDependencies(this IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Environment.GetEnvironmentVariable("CodeXMinioService")));
services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
return services;
}
}
Використання AutoMapper
private readonly IMapper _mapper;
public ClassName(IMapper mapper)
{
_mapper = mapper;
}
public async Task GetDataFromDb(SieveModel sieveModel)
{
var list = _dbContext.TableName()
.Where(x => x.IsDeleted == false)
.IgnoreQueryFilters()
.AsQueryable();
var filtered_list = _sieveProcessor.Apply(sieveModel, list);
var result_list = await filtered_list.ToListAsync();
// у випадку списку
var response = _mapper.Map<List<UserDTO>>(result_list);
// у випадку моделі
var response = _mapper.Map<UserDTO>(result_list);
return new OkObjectResult(response);
}
Висновок
AutoMapper спрощує відображення об'єктів у C#, заощаджуючи час та зусилля, покращуючи підтримуваність коду. Використовуючи потужні можливості, такі як кастомне відображення, умовне відображення та проектування, ви зможете з легкістю обробляти складні сценарії.
Почніть використовувати AutoMapper у своїх проектах вже сьогодні і відчуйте різницю, яку він приносить у ваш робочий процес!
Перекладено з: How to use AutoMapper in C#