AutoMapper یک کتابخانه برای مپ کردن اشیا میباشد که کار مپ کردن دستی را بسیار ساده میکند. به عنوان مثال شما نیاز دارید یک DTO ورودی را  به یک مدل دیگر مپ کنید. برای این کار شما باید برای تمامی پراپرتی های موردنیاز کد بنویسید. به طور مثال باید به صورت زیر عمل کنید:

static void Main(string[] args)
{
    UserDto userDto = new UserDto
    {
        Id = 1,
        Age = 21,
        FullName = "Farhad Zamani"
    };
    User user = new User
    {
        Age = userDto.Age,
        FullName = userDto.FullName,
        Id = userDto.Id
    };
    Console.WriteLine($"FullName : {user.FullName} \r\nAge : {user.Age}");
}

خب اگر تعداد پراپرتی ها زیاد باشد عملا باید کد بیشتری بنویسید و یک کار خسته کننده هم است. اما با استفاده از AutoMapper میتوانید عملیات مپ کردن را اتوماتیک سازید. برای استفاده از AutoMapper کتابخانه AutoMapper را ابتدا نصب کنید. میتوانید دستور زیر را در package manager console تایپ کنید و ورژن 9 AutoMapper را دانلود و نصب کنید.

Install-Package AutoMapper -Version 9.0.0

در ادامه باید به پیکربندی AutoMapper بپردازیم. در AutoMapper شما باید کلاسهایی که قرار است با هم مپ شوند را به AutoMapper معرفی کنید. برای مثال بالا باید کلاس های User و UserDto را به AutoMapper معرفی کنیم. در متد InitializeMapper ابتدا کلاس هایی که قرار است باهم مپ شوند را مینویسیم و در ادامه یک نمونه از شی IMapper برای انجام عملیات مپ برمیگردانیم.

private static IMapper InitializeMapper()
{
    var configuration = new MapperConfiguration(cfg =>
    {
        cfg.CreateMap<UserDto, User>();
    });
    return configuration.CreateMapper();
}
static void Main(string[] args)
{
    IMapper mapper = InitializeMapper();
    UserDto userDto = new UserDto
    {
        Id = 1,
        Age = 21,
        FullName = "Farhad Zamani"
    };
    User user = mapper.Map<User>(userDto);
    Console.WriteLine($"FullName : {user.FullName} \r\nAge : {user.Age}");
}

متد CreateMap دو تایپ جنریک قبول میکند که اولی کلاسی که قرار است عملیات مپ بر روی آن صورت گرفته و داده های مورد نیاز را از تایپ اولی در تایپ دومی کپی کند. در این مثال اگر بخواهید که داده های User را در UserDto مپ کنید خطای زیر را میدهد چون در متد InitializeMapper مشخص کرده اید که فقط داده های UserDto در User قرار بگیرند.

Unhandled exception. AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping.

اما اگر بخواهید که از هر دو طرف عملیات مپ کردن را انجام دهید میتوانید به صورت زیر عمل کنید:

var configuration = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<User, UserDto>();
    cfg.CreateMap<UserDto, User>();
});
// or
var configuration = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<User, UserDto>().ReverseMap();
});

میتوانید یکی از کدهای بالا را برای مپ کردن دو طرفه استفاده کنید .متد ReverseMap امکان مپ کردن دو طرفه را برای شما فراهم میکند. اما اگر تعداد مدل های شما زیاد شود این کار هم خسته کننده است که برای هرمدلی مشخص کنید که با چه مدل دیگری مپ شود. در ادامه به اتوماتیک کردن عملیات معرفی کردن مدل های موردنیاز برای مپ میپردازیم.

Powered by Froala Editor