Automapper 8 - лямбда-дерево выражений не может содержать нулевой распространяющий оператор
Automapper версии 8.0.0 удален ResolveUsing
метод расширения из IMappingExpression
и объединил его с MapFrom
метод расширения. Однако после замены ResolveUsing
с MapFrom
метод, определенные конфигурации выдают исключение.
оригинал ResolveUsing
:
CreateMap<SourceType, DestinationType>()
.ForMember(dest => dest.Customer,
opt => opt.ResolveUsing(src => src?.Customer ?? new Customer())
);
Заменено на MapFrom
:
CreateMap<SourceType, DestinationType>()
.ForMember(dest => dest.Customer,
opt => opt.MapFrom(src => src?.Customer ?? new Customer())
);
Это приводит к ошибке компиляции:
Ошибка CS8072
Automapper
Лямбда дерева выражений не может содержать нуль-распространяющий оператор.
1 ответ
Новый Func
перегрузки в Automapper 8.0.0 принимают больше параметров по сравнению со старыми / удаленными ResolveUsing
Перегрузки.
Вместо использования лямбда-выражения с одним входным параметром opt.MapFrom(src => ...)
при замене ResolveUsing
следует использовать перегрузку с 2 параметрами opt.MapFrom((src, dest) => ...)
,
MapFrom
выражение становится:
opt => opt.MapFrom((src, dest) => src?.Customer ?? new Customer())
Полный пример:
CreateMap<SourceType, DestinationType>()
.ForMember(dest => dest.Customer,
opt => opt.MapFrom((src, dest) => src?.Customer ?? new Customer())
);