我需要跟踪我们项目中的任何复杂(即非默认)映射。
为此,我使用了自定义值解析器,并在解析期间发布了一个日志事件。作为此消息的一部分,我想知道正在映射的目标成员,我希望在source.Context.MemberName中找到它- 但这始终为空。
值解析器:
public class Resolver : IValueResolver
{
public event MappingEventHandler MappingEvent;
public delegate void MappingEventHandler(MappingMessage m);
public ResolutionResult Resolve(ResolutionResult source)
{
var src = (SourceDTO)source.Context.SourceValue;
if (!String.IsNullOrWhiteSpace(src.Status) && src.Status == "Alert")
{
var newValue = source.Value + " - Fail";
var fieldName = source.Context.MemberName; //Always null
MappingEvent(new MappingMessage(fieldName , newValue));
return source.New(value, typeof(String));
}
return source;
}
}
...及其用法:
Resolver resolver = new Resolver();
//... subscribe to resolver events etc.
Mapper.CreateMap<SourceDTO, Common>()
.ForMember(dest => dest.ReferenceIdentifier
, opt => opt.ResolveUsing<Resolver>()
.FromMember(src => src.Reference)
.ConstructedBy(() => resolver)
我可以在 Automapper 代码中看到 MemberName 仅在 PropertyMap 为非 null 时才返回,并且由于在这种情况下 PropertyMap 为 null,我没有取回 MemberName。
此处未定义 PropertyMap 是否有原因?通过source.Context.TypeMap.GetPropertyMaps()有一个相关的候选人,但它没有被推送到这个上下文中。
有任何想法吗?也许有一种方法可以将正确的 PropertyMap 从 Context.TypeMap 集中拉出来?