ABP之应用服务(2)
在上一篇的笔记中,已经大致对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)的更多相关文章
- ABP(现代ASP.NET样板开发框架)系列之15、ABP应用层——应用服务(Application services)
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之15.ABP应用层——应用服务(Application services) ABP是“ASP.NET Boiler ...
- ABP应用层——应用服务(Application services)
ABP应用层——应用服务(Application services) 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之15.ABP应用层——应用服务(Applic ...
- ABP框架 - 应用服务
文档目录 本节内容: IApplicationService 接口 ApplicationService 类 CrudAppService 和 AsyncCrudAppService 类 简单的CRU ...
- ABP创建应用服务
原文作者:圣杰 原文地址:ABP入门系列(4)——创建应用服务 在原文作者上进行改正,适配ABP新版本.内容相同 1. 解释下应用服务层 应用服务用于将领域(业务)逻辑暴露给展现层.展现层通过传入DT ...
- ABP之应用服务(1)
在一个理想的层级项目中,展现层是不能直接访问领域对象的,那么展现层如何获取到自己需要的数据呢?也就是今天的主角-Application层,它的职责就是为展现层服务,它通过仓储获取到相应的数据,然后将数 ...
- 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录
ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视频:ABP架构设计交流群-7月18日上海线下交流会的内容分享(有高清录像视频的链接) 代码自动生成: ...
- ABP系列文章总目录:
转自:http://www.cnblogs.com/mienreal/p/4528470.html 1.ABP总体介绍 2.ASP.NET Boilerplate入门 3.ABP分层架构 4.ABP模 ...
- ABP示例程序-使用AngularJs,ASP.NET MVC,Web API和EntityFramework创建N层的单页面Web应用
本片文章翻译自ABP在CodeProject上的一个简单示例程序,网站上的程序是用ABP之前的版本创建的,模板创建界面及工程文档有所改变,本文基于最新的模板创建.通过这个简单的示例可以对ABP有个更深 ...
- 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录(转)
出处:http://www.cnblogs.com/mienreal/p/4528470.html ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视 ...
随机推荐
- spring核心之AOP学习总结二
一:springAOP常用的注解 @Aspect:声明方面组件 @Before:声明前置通知 @After-returning:声明后置通知 @After:声明最终通知 @Around:声明环绕通知 ...
- pom.xml 配置maven私服
1.pom.xml 配置maven私服 <repositories> <repository> <id>caf_repositories& ...
- linux 按照端口一句命令杀死进程,按照进程名称一句命令杀死进程
例如杀死nginx 按照程序名称杀死进程 例如杀死nginx的进程 ps -aux|grep nginx|grep -v grep|cut -c 9-15|xargs kill -9 或者 ps -a ...
- bash脚本 while语法
基本语法(比较常见的两种形式): 只要特定条件为真,”while” 语句就会执行 while [ condition ] do command1 command2 command3 done 或者 w ...
- EasyHook实现
using System; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Collect ...
- vuejs使用FormData对象,ajax上传图片文件
我相信很多使用vuejs的朋友,都有采用ajax上传图片的需求,因为前后端分离后,我们希望都能用ajax来解决数据问题,传统的表单提交会导致提交成功后页面跳转,而使用ajax能够无刷新上传图片等文件. ...
- FastJson-fastjson的简单使用(alibaba)
原文章:http://blog.csdn.net/glarystar/article/details/6654494 原作者:张星的博客 maven配置: <dependency> < ...
- 管理工具 django-admin.py的相关命令列表
C:\Users\lenovo> django-admin.py Type 'django-admin.py help <subcommand>' for help on a spe ...
- iOS开发-- 使用NSNumber将int、float、long等数据类型加入到数组或字典中
// 设置值 NSNumber *number=[NSNumber numberWithInt:45]; // 取值 NSLog(@"NSNumber %d",[number in ...
- 《计算机图形学》2.1.4 彩色CRT监视器
CRT监视器利用能发射不同颜色光的荧光层的组合来显示彩色图形.不同荧光层的发射光组合起来,可以生成一种按其比例而定的可见颜色. 显示彩色图形的一种方法是在屏幕上涂上多层不同的荧光粉.发射颜色由电子束在 ...