Что такое «экземпляр», эквивалентный использованию «статического» Mapper.Map внутри CreateMap с использованием AutoMapper 7.0.1? - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь перейти на AutoMapper 7.0.1, который больше не использует статические методы.Я получаю следующую ошибку:

Mapper не инициализирован.Вызовите Initialize с соответствующей конфигурацией.Если вы пытаетесь использовать экземпляры mapper через контейнер или иным образом, убедитесь, что у вас нет вызовов статических методов Mapper.Map, и если вы используете методы расширения ProjectTo или UseAsDataSource, убедитесь, что вы передаете соответствующий IConfigurationProvider.instance.

Я думаю, что это исходит от таких профилей, которые я переключил, чтобы не использовать статические методы, за исключением того, что он все еще использует статический Mapper.Map<>() в лямбда-выражении:

public class MyProfile : Profile
{
    public MyProfile()
    {
        CreateMap<CredentialDetailDto, CredentialDetail>()
            .ForMember(x => x.Owners, opt => opt.ResolveUsing(y => 
                Mapper.Map<IList<OwnerDto>>(y.Owners)))
    }
}

Как я могу получить экземпляр маппера, который будет использоваться вместо статического Mapper.Map метода?

1 Ответ

0 голосов
/ 24 сентября 2018

Используя комментарий Люциана, я нашел https://stackoverflow.com/a/43259537/64279. Кажется, что есть перегрузки, которые передадут вам контекст, который имеет экземпляр IMapper.

Например:

.ForMember(x => x.Owners, opt => opt.ResolveUsing((src, dst, arg3, context) => 
    context.Mapper.Map<IList<OwnerDto>>(src.Owners)))

Существуют перегрузки и для других методов, таких как

.AfterMap((s, d, context) =>

И

.ConvertUsing((source, dst, context) =>

Вам просто нужно указать правильное количество аргументов в своем лямбда-выражении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...