【发布时间】:2021-07-02 03:27:50
【问题描述】:
我有一种情况需要展平一组项目。
我这样设置我的映射配置文件:
CreateMap<IEnumerable<IMySetting>, IMySettingLookup>()
.ForMember(l => l.MySetting1,
o => o.MapFrom(sc =>
sc.FirstOrDefault(s => s.SettingName == nameof(IMySettingLookup.MySetting1)).SettingValue))
.ForMember(l => l.MySetting2,
o => o.MapFrom(sc =>
sc.FirstOrDefault(s => s.SettingName == nameof(IMySettingLookup.MySetting2)).SettingValue))
.As<MySettingLookup>(); // notice this is a concrete type
当我这样调用地图函数时:
IEnumerable<IMySetting> settings =....;
IMySettingLookup lookup = _mapper.Map<IMySettingLookup>(settings);
我得到这个错误:
AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping.
Mapping types:
Object -> IMySettingLookup
System.Object -> MyStuff.Models.IMySettingLookup
Stack Trace:
lambda_method(Closure , Object , IMySettingLookup, ResolutionContext )
但是,当我使用具体类型设置映射配置文件并使用如下具体类型调用 Map 方法时,一切正常:
CreateMap<IEnumerable<MySetting>, MySettingLookup>() // notice everything is concrete types
.ForMember(...)....
and
IEnumerable<MySetting> settings =....;
IMySettingLookup lookup = _mapper.Map<MySettingLookup>(settings); // notice concrete types
我的问题是,当我的源类型是 IEnumerable<T> 其中 T 是一个接口时,如何定义我的映射配置文件?
编辑
我已将一个可重现的最小示例上传到https://github.com/nandun5/so-68219262-automapper
请注意,如果我只是使用具体类而不是接口,我不会看到任何问题。但是,在我的实际场景中,这对我来说并不是一个真正的选择,因为我所有的数据服务合同都是接口。
【问题讨论】:
标签: c# .net .net-core automapper automapper-10