简体   繁体   English

使用带有元组的 open generics 在 AutoMapper 10 中不起作用

[英]Using open generics with tuples is not working in AutoMapper 10

I have the following two POCOs:我有以下两个 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; }
}

Then I defined two people:然后我定义了两个人:

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

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

Here is the code I tried to execute:这是我尝试执行的代码:

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);

On execution, I get an AutoMapperMappingException saying I am missing a type map configuration or the mapping is unsupported.在执行时,我收到一个 AutoMapperMappingException,说我缺少 map 类型配置或不支持映射。 My hope was that I could leverage the open generics feature and not have to register every Tuple version.我希望我可以利用开放的 generics 功能,而不必注册每个 Tuple 版本。 If I explicitly do this, then everything works fine.如果我明确地这样做,那么一切正常。 Am I missing anything?我错过了什么吗?

I am using AutoMapper v10.我正在使用 AutoMapper v10。

It's because you did not specfied the generics of Tuple这是因为您没有指定 Tuple 的 generics

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编辑

the right thing to do is:正确的做法是:

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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM