Использование открытых универсальных шаблонов с кортежами не работает в AutoMapper 10 - PullRequest
0 голосов
/ 13 июля 2020

У меня есть следующие два POCO:

private class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

private class PersonDto
{
    public string Name { get; set; }
    public int Age { get; set; }
}

Затем я определил двух людей:

private readonly Person _person1 = new Person
{
    Name = "Steve",
    Age = 20
};

private readonly Person _person2 = new Person
{
    Name = "Alex",
    Age = 45
};

Вот код, который я пытался выполнить:

var mapper = new MapperConfiguration(m =>
{
    m.CreateMap<Person, PersonDto>().ReverseMap();
    m.CreateMap(typeof(Tuple<>), typeof(Tuple<>)).ReverseMap();
}).CreateMapper();

var tuple = Tuple.Create(_person1, _person2);
var mappedTuple = mapper.Map<Tuple<PersonDto, PersonDto>>(tuple);

При выполнении я получаю AutoMapperMappingException о том, что мне не хватает конфигурации карты типов или сопоставление не поддерживается. Я надеялся, что смогу использовать функцию открытых дженериков и мне не придется регистрировать каждую версию Tuple. Если я это сделаю явно, то все будет нормально. Я что-то упустил?

Я использую AutoMapper v10.

1 Ответ

2 голосов
/ 13 июля 2020

Это потому, что вы не указали обобщенные типы Tuple

var mapper = new MapperConfiguration(m =>
{
    m.CreateMap<Person, PersonDto>().ReverseMap();
    m.CreateMap(typeof(Tuple<Person, Person>), typeof(Tuple<PerdonDto,PersonDto>)).ReverseMap();
}).CreateMapper();

var tuple = Tuple.Create(_person1, _person2);
var mappedTuple = mapper.Map<Tuple<PersonDto, PersonDto>>(tuple);

Edit

, правильнее всего сделать:

var mapper = new MapperConfiguration(m =>
    {
        m.CreateMap<Person, PersonDto>().ReverseMap();
        m.CreateMap(typeof(Tuple<,>), typeof(Tuple<,>)).ReverseMap();
    }).CreateMapper();
    
    var tuple = Tuple.Create(_person1, _person2);
    var mappedTuple = mapper.Map<Tuple<PersonDto, PersonDto>>(tuple);
...