自动映射模型:
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我们可以很容易地看到它使用 GetOrAdd
方法从 ConcurrentDictionary
获取了一个 mapper
函数。这意味着如果它不存在于缓存中,则会创建它。
public Delegate GetMapperFunc(MapRequest mapRequest) => _mapPlanCache.GetOrAdd(mapRequest).Typed;
关于c# - 为什么 AutoMapper 嵌套映射在没有内部类型的 CreateMap 的情况下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58640616/