AutoMapper с внедрением зависимостей не отображает профили? - PullRequest
0 голосов
/ 03 апреля 2020

, так что это мой первый вопрос о переполнении стека, и я надеюсь, что смогу дать достаточно подробностей для помощи. Я пытаюсь использовать AutoMappper с do tnet 3.1 с внедрением зависимостей, но, похоже, он не регистрирует мои карты так, как он говорит.

Ошибка, которую я получаю:

AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping.

Mapping types:
User -> UserCustomerDto

В моем файле Startup.cs у меня есть: services.AddAutoMapper(typeof(Startup)); Внутри IServiceCollection области

У меня есть User модель и созданы мои различные модели DTO.

Вот пример модели профиля, которая у меня есть:

    public class UserCustomerProfile : Profile
    {
        public UserCustomerProfile()
        {
            CreateMap<User, UserCustomerDto>();
            CreateMap<UserCustomerDto, User>();
        }
    }

В моих моделях DTO есть все поля, которые есть в моей пользовательской модели, минус несколько, те, которые я не хочу отображать в пользовательском интерфейсе.

Документация была довольно трудной для следования, так как есть примеры внедрения без зависимостей, а также до 9.0, где конфигурация требовалась во время запуска проекта.

Я также пытался использовать .ReverseMap() на CreateMap(), но это тоже не сработало.

Я внедряю внутри службы, которую я использую:

        private readonly IMapper _mapper;

        public UserService(IMapper mapper)
        {
            _mapper = mapper;
        }

И там, где ошибка выкладывается, находится внутри этой службы с этот код: _mapper.Map<UserCustomerDto>(user)

Я довольно плохо знаком с сделайте tnet core и C# в целом, поэтому любая помощь будет принята с благодарностью! Спасибо, и я надеюсь, что это было достаточно информативно, чтобы указать мне правильное направление.

ОБНОВЛЕНИЕ: При перемещении моделей профиля в тот же проект, что и мой запуск, все работает нормально. Теперь мне просто нужно знать, как я могу добавить ссылку на другой проект, содержащий мои модели профиля. А может я не могу? Было бы неплохо оставить его в моем проекте Models, где остальные мои модели.

1 Ответ

1 голос
/ 03 апреля 2020

Я думаю, что вы не зарегистрировали свои профили autopper в контейнере служб.

Настройка для ядра do tnet здесь

https://docs.automapper.org/en/stable/Dependency-injection.html#asp - net -core

Добавить дополнительный пакет nuget для do tnet core с именем AutoMapper.Extensions.Microsoft.DependencyInjection

Если ваши профили находятся в одном проекте, вы можете добавить этот код при запуске

services.AddAutoMapper(Assembly.GetExecutingAssembly());

Если ваши профили автопроизводителя находятся в другом проекте

// where UserCustomerProfile is any class in the other project
services.AddAutoMapper(
    Assembly.GetAssembly(typeof(UserCustomerProfile)));

Он будет искать все профили и регистрировать их в списке услуг.

...