Ich mag viele Antworten, besonders die von @saineshwar. Ich verwende .net Core 3.0 mit AutoMapper 9.0, daher ist es an der Zeit, die Antwort zu aktualisieren.
Was für mich funktioniert hat, war in Startup.ConfigureServices (...), das den Dienst folgendermaßen registriert:
services.AddAutoMapper(cfg => cfg.AddProfile<MappingProfile>(),
AppDomain.CurrentDomain.GetAssemblies());
Ich denke, dass der Rest der @ Saineshwar-Antwort perfekt bleibt. Aber wenn jemand interessiert ist, ist mein Controller-Code:
[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);
}
Und meine Mapping-Klasse:
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();
}
}
----- BEARBEITEN -----
Nachdem ich die Dokumente gelesen habe, die in den Kommentaren von Lucian Bargaoanu verlinkt sind, denke ich, dass es besser ist, diese Antwort ein wenig zu ändern.
Die parameterlos services.AddAutoMapper()
(mit der Antwort @saineshwar) funktioniert nicht mehr (zumindest für mich). Wenn Sie jedoch die NuGet-Assembly AutoMapper.Extensions.Microsoft.DependencyInjection verwenden, kann das Framework alle Klassen überprüfen, die AutoMapper.Profile erweitern (wie meine, MappingProfile).
In meinem Fall, in dem die Klasse zu derselben ausführenden Assembly gehört, kann die Dienstregistrierung auf verkürzt werden services.AddAutoMapper(System.Reflection.Assembly.GetExecutingAssembly());
(Ein eleganterer Ansatz könnte eine parameterlose Erweiterung mit dieser Codierung sein).
Danke, Lucian!