Automapper MapsTo 属性对引用的类不起作用

我正在努力理解我在这里做错了什么。我一直在解决方案中使用 Automapper + Automapper.Attributes ( https://github.com/schneidenbach/AutoMapper.Attributes ),最近我不得不将我的 API 项目拆分成一个“核心”库和原始 API . 当类文件移到 API 项目之外时,Automapper 无法创建映射。我已经设置了一个具有以下结构的演示项目来确认这个问题:(可在此处获得:https : //github.com/greghesom/AutoMapper_Example)

  • 解决方案

    • API(客户和人员类)

    • API.Core(宠物和狗类)


  • API 项目引用 API.Core

  • Pet 类映射到 Dog 类

  • Person 类映射到 Customer 类


API.Core - 狗类


namespace API.Core

{

    public class Dog

    {

        public string Name { get; set; }

    }

}

API.Core - 宠物类


namespace API.Core

{

    [MapsTo(typeof(Dog))]

    public class Pet

    {

        [MapsToProperty(typeof(Dog), "Name")] //Edit: Fixed this typo

        public string PetName { get; set; }

    }

}

API - 人员类


namespace API.Models

{

    [MapsTo(typeof(Customer))]

    public class Person

    {

        [MapsToProperty(typeof(Customer), "FirstName")]

        public string Name { get; set; }

    }

}

API - 客户类


namespace API.Models

{

    public class Customer

    {

        public string FirstName { get; set; }

    }

}

API - 启动


   AutoMapper.Mapper.Initialize(cfg => {

                typeof(API.WebApiConfig).Assembly.MapTypes(cfg);  

            });

API - 控制器


var person = new Person { Name = "John" };

var customer = AutoMapper.Mapper.Map<Customer>(person);//This Works


var dog = new Dog { Name = "Lucky" };

var pet = AutoMapper.Mapper.Map<Pet>(dog);//This throws exception


智慧大石
浏览 200回答 2
2回答

人到中年有点甜

我遇到了同样的问题(AutoMapper 7.0.0)。问题的关键在于错误消息:“AutoMapper 为您创建了此类型映射,但您的类型无法使用当前配置进行映射”。从 6.2.0 开始,AutoMapper 尝试为未显式映射的类型创建映射本身,即:在很多情况下不再需要创建映射。但是,它似乎使用它自己创建的映射而不是您定义的映射,即使对于您明确定义它们的类型也是如此。至少,这是我遇到的。一个快速检查的方法:降级到6.1.1版本,看看问题是否仍然存在。就我而言,降级解决了这个问题。我确实觉得必须有更好的方法来解决这个问题(或者它甚至是一个错误......),但我还不知道如何。万一我找到了,我会回贴在这里。只是想我已经把它扔在这里了,以防你需要快速修复:)
打开App,查看更多内容
随时随地看视频慕课网APP