码迷,mamicode.com
首页 > 其他好文 > 详细

ABP之应用服务(2)

时间:2018-01-27 13:35:18      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:apt   分享   扩展   编写   依赖   ati   说明   使用   .com   

在上一篇的笔记中,已经大致对Application层的使用作了简要的使用说明,感觉还是有些东西需要研究一下,所以承接上文,对AutoMapper这个方便的东西,稍微研究一下。

一.初识AutoMapper

首先使用一个简单的控制台应用程序,测试一下AutoMapper。我们使用nuget将AutoMapper的库引入到我们的项目中就可以使用了。

技术分享图片

运行一下

技术分享图片

上面的代码实现了从List<Book>到List<BookDto>的映射。

从上面的标注中可以看出使用AutoMapper 的关键点:

1. 创建映射规则,上面我创建了从Book到BookDto的单向映射

2. 使用映射

问题来了,上面的代码只是实现了最简单的映射关系,就是相同名字的Model和Dto之间的映射,此时的Msg是没有值的,如果我想将Book中的BookName的值赋值给Msg,怎么办呢,那么这里就需要定制我们自己的映射规则了。只要将代码稍微修改一下就好了

技术分享图片

技术分享图片

从上面的代码中可以看出我们使用的都是Mapper的静态方法,虽然很方便,但是依赖性比较强,那么有没有使用实例方法的方式呢?

技术分享图片

技术分享图片

二.ABP中的AutoMapper 

(1) 在ABP中集成了AutoMapper,封装了AutoMapper中的方法,都是进行了相应的扩展,比如MapTo。在ABP中定义映射规则的方式总体来说两种。

     1.使用特性标签AutoMap、AutoMapTo、AutoMapFrom,这种方式的缺点就是不方便自定义规则,只能使用默认的规则

技术分享图片

在这里稍微插一句,如果Dto的字段与Model中的字段完全对应,命名完全相同,没有多余的字段,其实不打特性标签,也是可以直接调用映射API实现映射的,但是还是强烈建议一定要定义映射规则的,因为你的Dto并不是一直都是完全对应的。

      2.使用API的方式定义映射规则。

    (1)在ABP Zero中对映射规则进行统一的管理,减少耦合性

技术分享图片

 

技术分享图片

    (2)在Abp免费的模板框架中可以使用Profile的方式,实现自定义规则的创建。

技术分享图片

      在模板中为我们创建的User中找到了这个profile

 技术分享图片

 技术分享图片

所以我们按照User中给出的代码,我们可以将特性标签去掉了,编写我们自己的MapFile,比如这样:

技术分享图片

运行也是OK的

(2)映射API的调用

在ABP中,我们即可以使用AutoMapper原生的API实现模型和Dto之间的映射,也可以使用Abp.AutoMapper中为我们封装的API,同时还可以使用ObjectMapper.

 技术分享图片

在原生的AutoMapper中有一种方式是使用实例化一个Map对象的方式,创建映射规则。ObjectMapper就是通过依赖注入的方式注入的一个用来创建映射规则的Mapp实例对象,这个属性是在ApplicationService的顶级父类AbpServiceBase中定义的。

技术分享图片

使用ObjectMapper的好处,也是显而易见的,可以减少对AutoMapper的耦合性,方便我们进行单元测试。

ABP之应用服务(2)

标签:apt   分享   扩展   编写   依赖   ati   说明   使用   .com   

原文地址:https://www.cnblogs.com/XZhao/p/8365259.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!