Я только начал использовать Automapper и, похоже, не могу получить правильную конфигурацию. Есть несколько противоречивых объяснений SO, и документация не совсем понятна, по крайней мере, для меня.
В настоящий момент я получаю следующую ошибку.
Unable to resolve service for type 'AutoMapper.MapperConfiguration' while attempting to activate 'JobsLedger.API.Controllers.API.App.ODataClientController
В Startup.cs У меня есть следующее:
services.AddAutoMapper(c => c.AddProfile<AutoMapping>(), typeof(Startup));
Мой профиль был настроен следующим образом:
public class AutoMapping : Profile
{
public AutoMapping()
{
// Add as many of these lines as you need to map your objects
CreateMap<Client, ClientIndexDto>();
//CreateMap<UserDto, User>();
}
}
и в моем контроллере у меня есть следующее:
public class ODataClientController : ODataController, IClientController {
private readonly MapperConfiguration _mapper;
private IClientDATARepository _clientDATARepository;
private readonly IClientServices _clientServices;
private readonly DATAContext _context;
public ODataClientController(MapperConfiguration mapper, IClientDATARepository clientDATARepository, IClientServices clientServices, DATAContext context) {
_mapper = mapper;
_clientDATARepository = clientDATARepository;
_clientServices = clientServices;
_context = context;
}
[HttpGet]
[ODataRoute("AllClients()")]
[EnableQuery()]
public IQueryable<ClientIndexDto> Get(ODataQueryOptions<ClientIndexDto> options)
{
var clients = _clientDATARepository.AllIncluding();
var clientIndexDtos = clients.ProjectTo<ClientIndexDto>(_mapper); // magic happens here...
return (IQueryable<ClientIndexDto>)options.ApplyTo(clientIndexDtos);
}
Я установил пакеты NuGet для Automapper - 9.0.0 и расширения Automapper для внедрения зависимостей 7.0.0
Это все, что я сделал для запуска и запуска. Что мне не хватает или что не так с этой реализацией.
Я использовал this с веб-сайта Code Mentor Community, и я использовал этот ответ от SO для настройки проекция.
ОБНОВЛЕНИЕ - Спасибо за то, что определили опечатку. Как я уже упоминал, существует ряд вариантов реализации, а также ряд реализаций, относящихся к версиям, некоторые из которых являются устаревший. Трудно, когда вы новичок в этом пакете, понять, что является единственным источником правды. При этом я изменил это ключевое слово MapperConfiguration на IMapper следующим образом:
public class ODataClientController : ODataController, IClientController {
private readonly IMapper _mapper;
private IClientDATARepository _clientDATARepository;
private readonly IClientServices _clientServices;
private readonly DATAContext _context;
public ODataClientController(IMapper mapper, IClientDATARepository clientDATARepository, IClientServices clientServices, DATAContext context) {
_mapper = mapper;
_clientDATARepository = clientDATARepository;
_clientServices = clientServices;
_context = context;
}
[HttpGet]
[ODataRoute("AllClients()")]
[EnableQuery()]
public IQueryable<ClientIndexDto> Get(ODataQueryOptions<ClientIndexDto> options)
{
var clients = _clientDATARepository.AllIncluding();
var clientIndexDtos = clients.ProjectTo<ClientIndexDto>(_mapper); // magic happens here...
return (IQueryable<ClientIndexDto>)options.ApplyTo(clientIndexDtos);
}
Теперь я получаю сообщение об ошибке:
cannot convert from 'AutoMapper.IMapper' to 'AutoMapper.IConfigurationProvider
в строке:
var clientIndexDtos = clients.ProjectTo<ClientIndexDto>(_mapper);