
پیکربندی و نصب AutoMapper
در این قسمت به پیکربندی و نصب AutoMapper میپردازیم.قصد داریم از AutoMapper در پروژه های Asp.Net Core 8 همراه با EF Core 9 استفاده کنیم. تصور کنید در حال ساخت یک برنامه پیچیده هستید. دادههای زیادی دارید. که باید از دیتابیس خوانده شوند. و در قسمتهای مختلف برنامه نمایش داده شوند؛ مثلاً یک سیستم مدیریت کاربران. هر کاربر اطلاعات زیادی مثل نام، نام خانوادگی، تاریخ تولد، نقشها و مجوزها دارد. اما در بسیاری از بخشها نیازی به نمایش تمام این اطلاعات نیست. مثلاً در صفحه لیست کاربران، فقط نام، ایمیل و نقش آنها نمایش داده میشود. حالا چطور میتوانید این دادههای پیچیده را به مدلهای سادهتر تبدیل کنید؟
اگر بخواهید این کار را به صورت دستی انجام دهید، مجبورید برای هر مدل یک کد تبدیل بنویسید. این کدها هم طولانی هستند، هم تکراری و احتمال خطا در آنها زیاد است. دقیقاً اینجاست که یک ابزار قدرتمند مثل AutoMapper به کمک شما میآید. AutoMapper مانند یک مترجم حرفهای عمل میکند؛ کافی است به آن بگویید که چگونه دادههای شما از یک مدل به مدل دیگر تبدیل شوند و بقیه کارها را به آن بسپارید. اما مثل هر ابزار دیگری، برای استفاده از آن باید تنظیمات اولیهای انجام دهید. این مرحله همان چیزی است که به آن پیکربندی اولیه و تعریف نقشهبرداریها (Mappings) میگوییم.
چرا پیکربندی اولیه مهم است؟
AutoMapper ذاتاً هیچ شناختی از مدلهای شما ندارد. اگر بخواهید بین دو مدل، مثلاً مدل کاربر (User) و مدل نمایشی آن (UserDto)، دادهها را منتقل کنید، باید به AutoMapper یاد بدهید که چه ویژگیهایی از مدل مبدا به مدل مقصد مرتبط هستند. این فرآیند پایه و اساس کار با AutoMapper است و اگر به درستی انجام شود، میتواند حجم زیادی از کارهای دستی و خستهکننده شما را حذف کند.
پیکربندی صحیح به شما کمک میکند:
- از خطاهای رایج در تبدیل دادهها جلوگیری کنید.
- کدهای خود را مرتبتر و خواناتر کنید.
- به راحتی تغییرات را در مدلهای خود اعمال کنید بدون اینکه نگران بروزرسانی دستی کدها باشید.
مراحل پیکربندی و نصب AutoMapper
برای شروع کار با AutoMapper، باید چند گام ساده را طی کنیم. در ادامه این گامها را به تفصیل توضیح میدهیم:
- نصب AutoMapper : اولین گام این است که کتابخانه AutoMapper را به پروژه خود اضافه کنید. این کار را میتوانید با استفاده از NuGet انجام دهید.
Install-Package AutoMapper- ایجاد یک کلاس Profile : پروفایل یک کلاس ارائهشده توسط AutoMapper است. برای تعریف Mappings ها استفاده میشود. این کلاس کمک میکند Mappings ها سازماندهی شوند و پروژههای بزرگ خواناتر باشند.
مسیر پیشنهادی
Application/Mappings/MappingProfile.csنمونه کد تعریف نوع Mapping
public MappingProfile()
{
CreateMap<Manager,ManagerViewModel>().ReverseMap();
}- ثبت AutoMapper در Dependency Injection Container
AutoMapper باید به Dependency Injection (DI) پروژه اضافه شود. این کار را میتوانید در فایل Program.cs انجام دهید.
builder.Services.AddAutoMapper(typeof(MappingProfile));
OR
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());کد AppDomain.CurrentDomain.GetAssemblies تمام اسمبلیهای موجود در دامنه برنامه (Current AppDomain) اسکن میشوند. این یعنی تمام کلاسهایی که از Profile ارثبری کردهاند، بدون توجه به این که در کدام پروژه یا لایه قرار دارند، شناسایی میشوند. برای پروژههای چند لایه که کلاسهای Profile در لایههای مختلف تعریف شده.
کد typeof(Program) فقط اسمبلیای که کلاس Program در آن قرار دارد (معمولاً پروژه اصلی مثل WebAPI یا UI) اسکن میشود. کلاسهای Profile که در این اسمبلی باشند شناسایی و ثبت میشوند. مناسب برای: پروژههای تک لایه یا ساده که تمام پروفایلهای AutoMapper در پروژه اصلی تعریف شدهاند.
- نمونه کدهای Controller
private readonly MyDbContext _context;
private readonly IMapper _mapper;
//
public ManagersController(MyDbContext context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
//
List<ManagerViewModel> managerVm = _mapper.Map<List<ManagerViewModel>>(ManagerM);
//
var managerVm = await _context.managers.AsNoTracking().
ProjectTo<ManagerViewModel>(_mapper.ConfigurationProvider).ToListAsync();
//
var manager = _mapper.Map<Manager>(managerVm);






























سلام و خسته نباشید
تو ثبت AutoMapper اگر از نسخه جدید AutoMapper (مثل v15.0.1) استفاده میکنی، باید از delegate استفاده کنی. این کد رو در Program.cs قرار بده:
builder.Services.AddAutoMapper(cfg => ;cfg.AddMaps(typeof(MappingProfile).Assembly))
سلام
من از .net9 استفاده می کنم. از هر ورژن automapper که استفاده میکنم با ارور در اجرا مواجه می شم
Unable to resolve service for type 'AutoMapper.Mapper' while attempting to activate
در Program.cs هم از همه روش ها استفاده کردم ولی همه ارور میده
میشه راهنمایی کنین؟
سلام داخل کد دارید AutoMapper.Mapper تزریق می کنید و باید IMapper تزریق شود