Почему вложенное отображение AutoMapper работает без CreateMap для внутреннего типа - PullRequest
1 голос
/ 31 октября 2019

Модель для AutoMap:

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

1 Ответ

0 голосов
/ 31 октября 2019

Глядя на исходный код на github для Automapper , мы можем легко увидеть, что он получает функцию mapper из ConcurrentDictionary с помощью метода GetOrAdd. Это означает, что если он не существует в кеше, он создается.

 public Delegate GetMapperFunc(MapRequest mapRequest) => _mapPlanCache.GetOrAdd(mapRequest).Typed;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...