zoukankan      html  css  js  c++  java
  • 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的耦合性,方便我们进行单元测试。

  • 相关阅读:
    使用air16sdk打包ipa报错
    笔试题目
    网络编程Socket之UDP
    网络编程Socket之TCP
    Spring的HelloWorld
    一起学makefile
    使用Eclipse创建Hibernate工程
    log4j日志输出使用教程
    监听tomcat服务器启动/关闭并从配置文件中读取参数进行初始化
    java加载配置文件
  • 原文地址:https://www.cnblogs.com/XZhao/p/8365259.html
Copyright © 2011-2022 走看看