我正在一个项目中升级AutoMapper,从静态Mapper.CreateMap转换为新方式并注入我需要映射的IMapper.
除了一个用例外,这很好.我有几个用于复杂映射的ITypeConverters,它们使用Mapper.Map函数.我怎样才能解决这个问题?下面是我目前正在使用的代码.
静态Mapper.Map无法找到我定义的映射,因为没有使用静态方法创建.
- public partial class ApplicationMappingsProfile
- {
- private void RegisterMappings()
- {
- CreateMap<Application,AppDto>()
- .ConvertUsing<ApplicationTypeConverter>();
- }
- }
- private class ApplicationTypeConverter : ITypeConverter<App,AppDto>
- {
- public AppDto Convert(ResolutionContext context)
- {
- var src = context.SourceValue as App;
- if (src == null)
- {
- return null;
- }
- var dto = Mapper.Map<App,AppDto>(src);
- dto.property = Mapper.Map<Property>(src.SomeProperty);
- return result;
- }
- }
解决方法
ResolutionContext包含对当前Mapping引擎的引用.使用context.Engine.Mapper.Map切换Mapper.Map,你很高兴.
- public partial class ApplicationMappingsProfile
- {
- private void RegisterMappings()
- {
- CreateMap<Application,AppDto>(src);
- dto.property = context.Engine.Mapper.Map.Map<Property>(src.SomeProperty);
- return result;
- }
- }