Запрашиваемые расширения Automapper не отображаются - PullRequest
0 голосов
/ 10 марта 2020

Я использую следующее:

  • EntityFrameworkCore 3.1.2
  • . Net Стандартная библиотека 2.1
  • Automapper 9.0.0
  • Automapper.Extension.Microsoft.DependencyInjection 7.0.0

Мой DI для AutoMapper выглядит следующим образом:

services.AddAutoMapper(Assembly.GetExecutingAssembly());

У меня есть IMapFrom с реализацией по умолчанию:

using AutoMapper;

namespace Application.Common.Mappings
{
    public interface IMapFrom<T>
    {
        void Mapping(Profile profile) => profile.CreateMap(typeof(T), GetType());
    }
}

У меня есть класс DTO следующим образом:

    public class ServiceRegistrationDto : IMapFrom<ServiceRegistration>
    {
        public string ServiceName { get; set; }

        public string MessageType { get; set; }

        public string ServiceURL { get; set; }

        public void Mapping(Profile profile)
        {
            profile.CreateMap<ServiceRegistration, ServiceRegistrationDto>();
        }
    }

В моем обработчике я делаю следующее:

public async Task<ServiceRegistrationViewModel> Handle(GetServiceRegistrationListQuery request, CancellationToken cancellationToken)
{
    var serviceRegistrations = await _context.ServiceRegistrations
        .Where(s => s.MessageType.Equals(request.MessageType, StringComparison.InvariantCultureIgnoreCase))
        .ProjectTo<ServiceRegistrationDto>(_mapper.ConfigurationProvider)
        .ToListAsync(cancellationToken);

    return null;
}

Проблема в том, что "ProjectTo" не является определение IQueryable. У меня сложилось впечатление, что у Automapper есть Queryable Extensions. Я пропускаю пакет NuGet? Я слежу за примерами от Northwind Traders и не могу понять, что у меня отличается.

Я могу добраться до "ProjectTo" с помощью IMapper, например:

var x = _mapper.ProjectTo<ServiceRegistrationDto>(serviceRegistrations);

Но я бы предпочел сделать это как часть IQueryable, как вы должны.

1 Ответ

0 голосов
/ 10 марта 2020

Я отступил от кода и понял, что мне не хватает

using AutoMapper.QueryableExtensions;

DOH !!!

...