模型到自动映射:
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我们可以很容易地看到它从``ConcurrentDictionarymapper
GetOrAdd`方法中获得了by using
函数。这意味着如果它在缓存中不存在,则会创建它。
public Delegate GetMapperFunc(MapRequest mapRequest) => _mapPlanCache.GetOrAdd(mapRequest).Typed;