为什么AutoMapper嵌套映射在没有内部类型的CreateMap的情况下工作

问题描述 投票:0回答:1

模型到自动映射:

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

c# automapper
1个回答
0
投票

Looking at source code on github for Automapper我们可以很容易地看到它从``ConcurrentDictionarymapperGetOrAdd`方法中获得了by using函数。这意味着如果它在缓存中不存在,则会创建它。

 public Delegate GetMapperFunc(MapRequest mapRequest) => _mapPlanCache.GetOrAdd(mapRequest).Typed;
© www.soinside.com 2019 - 2024. All rights reserved.