AutoMapper کتابخانه ای ساده و سبک برای نگاشت اطلاعات یک شی به شی دیگر به صورت خودکار هست و...
فرض کنید Model ما
public class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public bool IsAdmin { get; set; }
public virtual ICollection<BlogPost> BlogPosts { get; set; }
}
و ViewModel ما
public class UserViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Password { get; set; }
}
باشه(توجه کنید در واقع من برای View ی مورد نظرم فقط به نام , نام خانوادگی و پسورد نیاز دارم)
برای استفاده UserViewModel بعنوان Model در View ی مورد نظر باید شی UserViewModel رو با اطلاعات شی User مقدار دهی کنیم مثلا با کدی مثل این در کنترلر.
public ActionResult Index(int id = 1)
{
var user = _userService.GetById(id);
var userViewModel = new UserViewModel
{
FirstName = user.FirstName,
LastName = user.LastName,
Password = user.Password
};
return View(userViewModel);
}
رهایی از نوشتن اینجور کدهای تکراری و خسته کننده باعث پیدایش AutoMapper شد...
برای استفاده از AutoMapper از نوگت استفاده میکنیم.
آدرس نوگت
PM > Install-Package AutoMapper
و
آدرس نوگت
PM > Install-Package AutoMapper.Extensions.Microsoft.DependencyInjectio n -Version 2.0.1
بعد از نصب این دو پکیچ نوبت به فراخوانی Automapper در کلاس Startup برنامه asp core می رسه :
public void ConfigureServices(IServiceCollection services) {
services.AddMvc();
services.AddAutoMapper();
}
حالا نوبت به ساخت کلاسی که این نگاشت ها رو برای ما انجام بده میرسه که در روت پروژه خودتون باید بسازید . به طور مثال من این کلاس رو با عنوان MappingProfile.cs میسازم و از
Profile مشتق می کنم :
public class MappingProfile : Profile {
public MappingProfile() {
// Add as many of these lines as you need to map your objects
CreateMap<User, UserViewModel>();
}
}
روش استفاده در برنامه هم به شکل زیر می باشد :
public class UserController : Controller {
private readonly IMapper _mapper;
public UserController(IMapper mapper) {
_mapper = mapper;
}
public async Task<IActionResult> Edit(string id) {
var user = await _context.Users
.SingleOrDefaultAsync(u => u.Id == id);
var model = _mapper.Map<User, UserViewModel>(user);
}
}
همنطور که میبنید با نوشتن چندین خط کد عملیات نگاشت اطلاعات یک شی به شی دیگه انجام شد.