Automapper - 如何在没有Mapper.Reset的情况下进行投影时禁用缓存?

Fer*_*lho 5 automapper asp.net-web-api

我认为使用AutoMapper是一个非常常规的场景,它试图动态映射投影,以便不向数据库查询我不会使用的列:

var map = Mapper.CreateMap<Source, DestinationViewModel>();
map.ForAllMembers(opt => opt.Ignore());

if (conditionForFieldA)
  map.ForMember(vm => vm.FieldA, conf => conf.MapFrom(src => src.FieldAbc));
if (conditionForFieldB)
  map.ForMember(vm => vm.FieldB, conf => conf.MapFrom(src => src.FieldDef));
if (conditionForFieldC)
  map.ForMember(vm => vm.FieldC, conf => conf.MapFrom(src => src.FieldGhi));
Run Code Online (Sandbox Code Playgroud)

似乎问题是AutoMapper会将映射设置缓存到Source和DestinationViewModel,并且不会接受/考虑相同的不同映射.这导致了我所面临的问题:它有时会遇到条件,但有时会遇到; 无论这个简单的逻辑如何,它只会查询数据库中第一个Mapper.CreateMap被调用后投影的相同列.

由于它是一个ASP.NET Web API项目,Mapper.Reset()似乎不是一个好的选择,因为AutoMapper安装只发生一次(Application_Start()),但如果我可以重置那些非常特定的映射,那将是很棒的仅设置.

有没有人遇到过这样的场景,之前能够使用AutoMapper解决它?

谢谢!