建模到自动映射:

public class OuterSource
{
    public int Value { get; set; }
    public InnerSource Inner { get; set; }
}

public class InnerSource
{
    public int OtherValue { get; set; }
}

public class OuterDest
{
    public int Value { get; set; }
    public InnerDest Inner { get; set; }
}

public class InnerDest
{
    public int OtherValue { get; set; }
}


我发现如果我将CreateMap注释为内部类型。
嵌套映射仍然有效。我想知道为什么它的工作原理,因为它没有明确的文件中说明。

var config = new MapperConfiguration(cfg => {
    cfg.CreateMap<OuterSource, OuterDest>();
    // cfg.CreateMap<InnerSource, InnerDest>();    // <-- don't need this
});
config.AssertConfigurationIsValid();

var source = new OuterSource
{
    Value = 5,
    Inner = new InnerSource {OtherValue = 15}
};
var mapper = config.CreateMapper();
var dest = mapper.Map<OuterSource, OuterDest>(source);


注意:我使用的是AutoMapper版本8.1.0

最佳答案

Looking at source code on github for Automapper通过使用mapper方法可以很容易地看到它从ConcurrentDictionary获得了GetOrAdd函数。这意味着如果它在缓存中不存在,则会创建它。

 public Delegate GetMapperFunc(MapRequest mapRequest) => _mapPlanCache.GetOrAdd(mapRequest).Typed;

关于c# - 为什么AutoMapper嵌套映射无需内部类型的CreateMap即可工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58640616/

10-13 08:11