[翻译]AutoMapper 官方入门文档 Getting started

译者注:技术日新月异,不保证此文章有效性,请以官方更新为准.另外为了便于理解,翻译不会照搬原文而是稍作修改

翻译日期 2017年3月5日

原帖地址

什么是AutoMapper?


AutoMapper是一个对象到对象的转换映射工具(object-object mapper).它能把一个输入对象转换成一个不同类型的对象输出.AutoMapper更有趣的地方是它提供了一些有趣的惯例规则来帮助我们转换对象.可以这样理解:只要按照AutoMapper 建立的规则来(构造实体),就不需要进行任何多余的设置.

为什么使用AutoMapper?


手动配对 非常无聊,测试配对是否正确 更无聊.AutoMapper配置简单,测试容易,还不快用?.其实这个问题要这么问"为毛要用object-object mapper?"配对会发生在很多地方,特别是层与层之间,比如UI层和领域层,或者服务层和领域层.修改了一个层通常会导致另外一个层的冲突,所以让object-object mapper来隔离模型,让每个层都能独立做好自己的事吧.

如何使用AutoMapper?


首先,你需要一个原始类和目标类.虽然目标类的设计可以按照他所在的层来,但是如果能够保证字段名称相同AutoMapper 能更好的为你服务.比如 你有一个原始类的字段叫 "FirstName",他会自动的配对目标类中的"FirstName"字段.AutoMapper 同样支持 Flattening

AutoMapper在配对的时候会忽略空引用异常,这个是故意设计的,如果你不喜欢,你可以搭配使用Custom-value-resolvers

一旦你有了想要配对的类型,那就用 MapperConfiguration 或者 静态类 Mapper 创建一个配对.通常情况下,每个应用程序域只需要一个 MapperConfiguration 实例 并且在启动的时候被实例化,你可以使用Mapper.Initialize (更多例子请看 Static-and-Instance-API )

   Mapper.Initialize(cfg => cfg.CreateMap());
    //或者
    var config = new MapperConfiguration(cfg => cfg.CreateMap());

左边是原始,右边是目标类,是用静态方法还是实例化Mapper来配对 取决于 static or instance initialization:

var mapper = config.CreateMapper();
// 或者
var mapper = new Mapper(config);
OrderDto dto = mapper.Map(order);
// 或者
OrderDto dto = Mapper.Map(order);

大多数应用可以使用依赖注入的方法来 注入 已经创建的 IMapper 实例

AutoMapper 针对上面的方法还有非泛型的版本,当在编译的时候还不知道类型时使用

在哪里配置AutoMapper?


如果你使用静态Mapper配对,每个程序领域只能设置一次,也就是说最好的地方就是在程序开始的地方,比如ASP.NET程序就设置在 Global.asax 文件下.通常情况下配置启动器的类需要自己单独一个类,然后在应用程序的启动方法中被调用,启动器的类可以叫 Mapper.Initialize 来配置所有的配对

怎么测试我的mappings?


为了测试你的配对,你需要做两件事

  • 调用启动器类创建好所有的配对
  • 调用 MapperConfiguration.AssertConfigurationIsValid
    比如:
var config = AutoMapperConfiguration.Configure();

config.AssertConfigurationIsValid();

有demo吗?

看看dnrTV episode on AutoMapper.

你可能感兴趣的:([翻译]AutoMapper 官方入门文档 Getting started)