在Automapper自定义值解析器中从ResolutionContext访问MemberName/PropertyMap

在Automapper自定义值解析器中从ResolutionContext访问MemberName/PropertyMap,automapper,Automapper,我需要跟踪项目中的任何复杂映射,即非默认映射 为了实现这一点,我使用一个自定义值解析器,并在解析过程中发布一个日志事件。作为此消息的一部分,我想知道要映射的目标成员,我希望在source.Context.MemberName中找到该成员,但它始终为null ValueResolver: 公共类解析器:IValueResolver { 公共事件映射事件处理程序映射事件; 公共委托void MappingEventHandlerMappingMessage m; 公共解析结果解析结果源 { var

我需要跟踪项目中的任何复杂映射,即非默认映射

为了实现这一点,我使用一个自定义值解析器,并在解析过程中发布一个日志事件。作为此消息的一部分,我想知道要映射的目标成员,我希望在source.Context.MemberName中找到该成员,但它始终为null

ValueResolver:

公共类解析器:IValueResolver { 公共事件映射事件处理程序映射事件; 公共委托void MappingEventHandlerMappingMessage m; 公共解析结果解析结果源 { var src=SourceDTOsource.Context.SourceValue; if!String.IsNullOrWhiteSpacesrc.Status&&src.Status==警报 { var newValue=source.Value+-Fail; var fieldName=source.Context.MemberName;//始终为空 MappingEventnew MappingMessagefieldName、newValue; 返回source.Newvalue,typeofString; } 返回源; } } 。。。及其用法:

分解器分解器=新分解器; //... 订阅解析器事件等。 Mapper.CreateMap .FormMemberDest=>dest.ReferenceIdentifier ,opt=>opt.ResolveUsing .FromMembersrc=>src.Reference .ConstructedBy=>resolver 我可以在自动映射代码中看到,MemberName仅在PropertyMap为非null时返回,并且由于PropertyMap在本例中为null,因此我无法恢复MemberName

这里没有定义PropertyMap有什么原因吗?通过source.Context.TypeMap.GetPropertyMaps有一个相关的候选者,但它没有被推送到这个上下文中


有什么想法吗?也许有一种方法可以将正确的PropertyMap从Context.TypeMap集合中拉出来?

在最近的AutoMaper构建中尝试过-看起来问题已经解决了

发行版本:2.1.266

工作版本:2.2.1

还发现使用以下语法从现有实例解析要容易得多:

分解器分解器=新分解器; //... 订阅解析器事件等。 Mapper.CreateMap .FormMemberDest=>dest.ReferenceIdentifier ,opt=>opt.resolvesusingresolver .FromMembersrc=>src.Reference