AutoMapper ResolveUsing 未被调用

Ste*_*hen 5 c# automapper

我有一个我目前使用的映射 MapFrom一切都按预期工作。

我试图MapFrom用 a替换ResolveUsing,我发现我的解析函数根本没有被调用。就好像代码不存在一样(在构造函数中尝试带有断点的类表单时,它没有被命中)。

// This works as expected
CreateMap<Contact, ContactListViewModel>()
    .ForMember(dest => dest.FirstName, map =>
        map.MapFrom(s => s.RelationshipTypeId == Relationship.SELF ? s.Person.FirstName : s.FirstName))

// This doesnt. Resolver never invoked  
CreateMap<Contact, ContactListViewModel>()
    .ForMember(dest => dest.FirstName, opt => opt.ResolveUsing<CustomResolver>());

// Example resolver 
public class CustomResolver : IValueResolver<object, object, string>
{
    public CustomResolver()
    {
        // never called
    }

    public string Resolve(object source, object destination, string member, ResolutionContext context)
    {
        return ... // never invoked
    }
}
Run Code Online (Sandbox Code Playgroud)

这看起来很基本,我确实有其他映射,我成功地使用了 ResolveUsing。关于如何调试这个并确定为什么我的映射被忽略的任何想法?

Ale*_*lex 0

我在使用 AutoMapper 10.1.1 和 C# 9 的记录时遇到了这个问题;

注意:该.ResolveUsing<>方法不再可用,已被通用MapFrom<>方法取代;

我试图将一条记录映射到另一条记录。目标记录有一个构造函数:

record Record(string Property)

.ConstructUsing()我的情况的解决方案是在所有调用之后调用.ForMember()

最终的映射如下所示:

CreateMap<SourceRecord, Record>()
.ForMember(x=>x.Property,config=>config.MapFrom<PropertyResolver>)
.ConstructUsing(source=> new Record(string.Empty))
Run Code Online (Sandbox Code Playgroud)

请注意,您可以使用默认值作为构造函数参数的参数,Automapper 仍将正确映射所有其他属性。

我希望当我再次遇到这个问题时,这可以帮助某人或未来的我。