Saya suka banyak jawaban, terutama yang @saineshwar. Saya menggunakan .net Core 3.0 dengan AutoMapper 9.0, jadi saya merasa sudah waktunya untuk memperbarui jawabannya.
Apa yang berhasil bagi saya adalah di Startup.ConfigureServices (...) daftarkan layanan dengan cara ini:
services.AddAutoMapper(cfg => cfg.AddProfile<MappingProfile>(),
AppDomain.CurrentDomain.GetAssemblies());
Saya pikir sisa jawaban @saineshwar tetap sempurna. Tetapi jika ada yang tertarik kode controller saya adalah:
[HttpGet("{id}")]
public async Task<ActionResult> GetIic(int id)
{
// _context is a DB provider
var Iic = await _context.Find(id).ConfigureAwait(false);
if (Iic == null)
{
return NotFound();
}
var map = _mapper.Map<IicVM>(Iic);
return Ok(map);
}
Dan kelas pemetaan saya:
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<Iic, IicVM>()
.ForMember(dest => dest.DepartmentName, o => o.MapFrom(src => src.Department.Name))
.ForMember(dest => dest.PortfolioTypeName, o => o.MapFrom(src => src.PortfolioType.Name));
//.ReverseMap();
}
}
----- EDIT -----
Setelah membaca dokumen yang terhubung dalam komentar oleh Lucian Bargaoanu, saya pikir lebih baik untuk mengubah jawaban ini sedikit.
Tanpa parameter services.AddAutoMapper()
(yang memiliki jawaban @saineshwar) tidak berfungsi lagi (setidaknya untuk saya). Tetapi jika Anda menggunakan perakitan NuGet AutoMapper.Extensions.Microsoft.DependencyInjection, kerangka kerja ini dapat memeriksa semua kelas yang memperpanjang AutoMapper.Profile (seperti tambang, MappingProfile).
Jadi, dalam kasus saya, di mana kelas milik majelis pelaksana yang sama, pendaftaran layanan dapat dipersingkat menjadi services.AddAutoMapper(System.Reflection.Assembly.GetExecutingAssembly());
(Pendekatan yang lebih elegan bisa menjadi ekstensi tanpa parameter dengan pengkodean ini).
Terima kasih, Lucian!