在上一篇的笔记中,已经大致对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)的更多相关文章

  1. ABP(现代ASP.NET样板开发框架)系列之15、ABP应用层——应用服务(Application services)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之15.ABP应用层——应用服务(Application services) ABP是“ASP.NET Boiler ...

  2. ABP应用层——应用服务(Application services)

    ABP应用层——应用服务(Application services) 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之15.ABP应用层——应用服务(Applic ...

  3. ABP框架 - 应用服务

    文档目录 本节内容: IApplicationService 接口 ApplicationService 类 CrudAppService 和 AsyncCrudAppService 类 简单的CRU ...

  4. ABP创建应用服务

    原文作者:圣杰 原文地址:ABP入门系列(4)——创建应用服务 在原文作者上进行改正,适配ABP新版本.内容相同 1. 解释下应用服务层 应用服务用于将领域(业务)逻辑暴露给展现层.展现层通过传入DT ...

  5. ABP之应用服务(1)

    在一个理想的层级项目中,展现层是不能直接访问领域对象的,那么展现层如何获取到自己需要的数据呢?也就是今天的主角-Application层,它的职责就是为展现层服务,它通过仓储获取到相应的数据,然后将数 ...

  6. 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录

    ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视频:ABP架构设计交流群-7月18日上海线下交流会的内容分享(有高清录像视频的链接) 代码自动生成: ...

  7. ABP系列文章总目录:

    转自:http://www.cnblogs.com/mienreal/p/4528470.html 1.ABP总体介绍 2.ASP.NET Boilerplate入门 3.ABP分层架构 4.ABP模 ...

  8. ABP示例程序-使用AngularJs,ASP.NET MVC,Web API和EntityFramework创建N层的单页面Web应用

    本片文章翻译自ABP在CodeProject上的一个简单示例程序,网站上的程序是用ABP之前的版本创建的,模板创建界面及工程文档有所改变,本文基于最新的模板创建.通过这个简单的示例可以对ABP有个更深 ...

  9. 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录(转)

    出处:http://www.cnblogs.com/mienreal/p/4528470.html ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视 ...

随机推荐

  1. tomcat8.0 基本参数调优配置

    1.优化内核及TCP连接:   fs.file-max = 655350 # 系统文件描述符总量 net.ipv4.ip_local_port_range = 1024 65535 # 打开端口范围 ...

  2. go语言之PLAN9汇编

    http://blog.studygolang.com/2013/05/asm_and_plan9_asm/ https://lrita.github.io/2017/12/12/golang-asm ...

  3. Java实现文件批量重命名

    Windows操作系统可以实现重命名文件操作,却不能实现批量重命名.本实例实现了批量重命名功能,可以将一个文件夹内同一类型的文件按照一定的规则批量重命名.用户可以给出重命名模板,程序可以根据模板对相应 ...

  4. Nginx配置中文域名

    今天碰到一个好玩的问题,还以为是nginx的缓存,各种清理就差把nginx卸载了,后来想想不对应该是中文域名的问题,对中文进行编码,搞定,如下: ... server { listen 80; ser ...

  5. Spring getBean 首字母大小写问题

    如果类第一个字母大写第二个小写,那么首字母小写获取bean 如果第一个和第二个字母都是大写的,那个获取bean首字母要大写

  6. Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie

    Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie >>>>>>>>>>>>& ...

  7. php mongodb manager 查数据的各种姿势

    一.连接 mongodb 数据库 以下操作默认都是以上面操作为前提(已连接成功)而做的操作 二.查的各种姿势 1)通过主键_id来查询,注意:_id不是直接用字符串来表示,要用 new \MongoD ...

  8. RF失败案例重跑

    1.1        失败案例重跑 该功能主要是针对上次连跑失败的案例需要重新执行测试的情况,可自动识别上次执行失败的案例并进行重跑,无需手动选择相应的案例,简单高效. 1.5.1.        重 ...

  9. 【RF库Collections测试】Remove Duplicates

    Name:Remove DuplicatesSource:Collections <test library>Arguments:[ list_ ]Returns a list witho ...

  10. Python 基础进阶

    函数的定义 函数的参数 函数的默认参数 函数的变量 函数的返回值 函数的多类型传值 函数的冗余参数 函数的递归调用 匿名函数 高阶函数 内建函数 模块与包 面向对象 类的定义 类的属性 类的内置属性 ...