建模到自动映射:
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/