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交流会录像视 ...
随机推荐
- 利用opencv作透明重叠人群密度热度图
在作热度图的时候我们经常需要将热度图调整透明度后叠加在原图上达到更好的展示效果.比如检测人气密度的热度图: (来自sensetime) 一般作图的时候会第一时间想到matplotlib,因为可以很方便 ...
- Linux定时运行程序脚本
项目开发中经常需要用将某个脚本定时运行从而避免其运行并不会影响到其他程序.虽说可以在脚本中利用sleep命令来做这一点,Linux自带了crontab命令可以很好的执行这一操作. 比如我们有名为som ...
- Centos7以上的版本 mysql 无法启动,无法停止问题
service mysqld start 始终提示如下: Failed to issue method call: Unit mysqld.service failed to load: No suc ...
- golang interface的使用和实现(翻译整理)
https://blog.csdn.net/u011409801/article/details/79291221
- git链接github仓库
配置Git 我们先在电脑硬盘里找一块地方存放本地仓库,比如我们把本地仓库建立在C:\MyRepository\1ke_test文件夹下 进入1ke_test文件夹 鼠标右键操作如下步骤: 1)在本地仓 ...
- python垃圾回收,判断内存占用,手动回收内存,二
以下为例子,判断计算机内存并释放程序内存. # coding=utf8 import time import psutil, gc, commands,os from logger_until imp ...
- Java使用ListIterator逆序ArrayList
对于列表而言,除了Iterator,还提供了一个功能更加强大的ListIterator.它可以实现逆序遍历列表中的元素.本示例将使用其逆序遍历ArrayList. 思路分析:要逆序遍历某个列表,首先要 ...
- 5 -- Hibernate的基本用法 --4 3 JDBC连接属性
Hibernate需要进行数据库访问,因此必须设置连接数据库的相关属性.所有Hibernate属性的名字和语义都在org.hibernate.cfg.Environment中定义. 关于JDBC连接配 ...
- 8 -- 深入使用Spring -- 2...6 Spring 4.0 增强的自动装配和精确装配
8.2.6 Spring 4.0 增强的自动装配和精确装配 Spring提供了@Autowired 注解来指定自动装配,@Autowired可以修饰setter方法.普通方法.实例变量和构造器等.当使 ...
- 九度 1254:N皇后问题
Leetcode 原题. 这里 N 最大会取到 13, TLE 了 代码 #include <iostream> #include <stdio.h> using namesp ...