c# – 在ITypeConverter中使用Automapper

前端之家收集整理的这篇文章主要介绍了c# – 在ITypeConverter中使用Automapper前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在一个项目中升级AutoMapper,从静态Mapper.CreateMap转换为新方式并注入我需要映射的IMapper.

除了一个用例外,这很好.我有几个用于复杂映射的ITypeConverters,它们使用Mapper.Map函数.我怎样才能解决这个问题?下面是我目前正在使用的代码.

静态Mapper.Map无法找到我定义的映射,因为没有使用静态方法创建.

  1. public partial class ApplicationMappingsProfile
  2. {
  3. private void RegisterMappings()
  4. {
  5. CreateMap<Application,AppDto>()
  6. .ConvertUsing<ApplicationTypeConverter>();
  7. }
  8. }
  9.  
  10. private class ApplicationTypeConverter : ITypeConverter<App,AppDto>
  11. {
  12. public AppDto Convert(ResolutionContext context)
  13. {
  14. var src = context.SourceValue as App;
  15. if (src == null)
  16. {
  17. return null;
  18. }
  19.  
  20. var dto = Mapper.Map<App,AppDto>(src);
  21. dto.property = Mapper.Map<Property>(src.SomeProperty);
  22.  
  23. return result;
  24. }
  25. }

解决方法

ResolutionContext包含对当前Mapping引擎的引用.使用context.Engine.Mapper.Map切换Mapper.Map,你很高兴.
  1. public partial class ApplicationMappingsProfile
  2. {
  3. private void RegisterMappings()
  4. {
  5. CreateMap<Application,AppDto>(src);
  6. dto.property = context.Engine.Mapper.Map.Map<Property>(src.SomeProperty);
  7.  
  8. return result;
  9. }
  10. }

猜你在找的C#相关文章