什么是automapper?

automapper是一个简单的小型库,用于解决一个看似复杂的问题 - 摆脱将一个对象映射到另一个对象的代码。这种类型的代码是相当沉闷和无聊的写,所以为什么不发明一个工具来为我们做?

我们来看看在.netcore3.1中怎样使用automapper9.0。

1 public class basicprofile : profile, iprofile

2 {

3 public basicprofile()

4 {

5 createmap();

6 createmap();

7 }

8 }

profile提供了一个命名的映射类,所有继承自profile类的子类都是一个映射集合。这里我创建了一个basicprofile继承profile类。

createmap创建映射规则。

iprofile创建影射类的约束,表示继承自该接口的类为映射集合。

由于automapper9.0中取消了自动创建影射规则的方法这里我们需要自己写一个:

1 public static class servicecollectionextensions

2 {

3 ///

4 /// 自动创建映射

5 ///

6 ///

7 public static void addautomapper(this iservicecollection services)

8 {

9 var allprofile = directory.getfiles(appdomain.currentdomain.basedirectory, "*.dll").select(assembly.loadfrom)

10 .selectmany(y => y.definedtypes)

11 .where(p => p.getinterfaces().contains(typeof(iprofile)))

12 .toarray();

13 services.addautomapper(allprofile);

14 }

15 }

添加到configureservices:

1 public void configureservices(iservicecollection services)

2 {

3 //自动创建映射

4 services.addautomapper();

5 }

这样automapper就配置完成,但为了方便调用,我们继续写几个扩展:

1 public static class automapperapplicationbuilderextensions

2 {

3 private static iserviceprovider _serviceprovider;

4 public static void usestateautomapper(this iapplicationbuilder applicationbuilder)

5 {

6 _serviceprovider = applicationbuilder.applicationservices;

7 }

8

9 public static tdestination map(object source)

10 {

11 var mapper = _serviceprovider.getrequiredservice();

12 return mapper.map(source);

13 }

14

15 public static tdestination map(tsource source)

16 {

17 var mapper = _serviceprovider.getrequiredservice();

18

19 return mapper.map(source);

20 }

21

22 public static tdestination mapto(this tsource source)

23 {

24 var mapper = _serviceprovider.getrequiredservice();

25 return mapper.map(source);

26 }

27

28 public static tdestination mapto(this object source)

29 {

30 var mapper = _serviceprovider.getrequiredservice();

31 return mapper.map(source);

32 }

33

34 public static list maptolist(this ienumerable source)

35 {

36 var mapper = _serviceprovider.getrequiredservice();

37 return mapper.map>(source);

38 }

39

40 public static list maptolist(this ienumerable source)

41 {

42 var mapper = _serviceprovider.getrequiredservice();

43 return mapper.map>(source);

44 }

45 }

添加到configure:

1 public void configure(iapplicationbuilder app, iwebhostenvironment env)

2 {

3 app.usestateautomapper();

4 }

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

automapper自动创建映射_.NetCore学习笔记:四、AutoMapper对象映射相关推荐

  1. Castle ActiveRecord学习笔记四:各种映射

    这里主要来说明ActiveRecord的属性与数据库及其字段的对应关系. 主要以ActiveRecordAttribute.PrimaryKeyAttribute.PropertyAttribute来 ...

  2. mysql存储引擎处理_[MySql学习笔记] 四 存储引擎事务处理

    MySql有一个重要的特征,被称为Pluggable Storage Engine Architecture(可替换存储引擎构架).有两个重要的存储引擎:MyISAM 和 InnoDB .其中MyIS ...

  3. python中seaborn库_[Python学习笔记(四)] Seaborn库基础学习——01

    用 matplotlib能够完成一些基本的图表操作,而 Seaborn 库可以让这些图的表现更加丰富. 1. import seaborn as sns 用于导入 seaborn 库,并取别名为 sn ...

  4. java 矩阵分解_矩阵论学习笔记四:矩阵分解 | 学步园

    参考书:<矩阵论>第3版,程云鹏 张凯院 徐仲编著 西北工业大学出版社 矩阵的三角分解和QR分解等在计算数学中都扮演着十分重要的角色,尤其是以QR分解所建立的QR方法,以对数值线性代数理论 ...

  5. 初探swift语言的学习笔记四(类对象,函数)

    2019独角兽企业重金招聘Python工程师标准>>> swift扩展了很多功能和属性,有些也比较奇P.只有慢慢学习,通过经验慢慢总结了. 下面将初步学习一下类的写法. 码工,最大爱 ...

  6. Java中如何创建自定义的注解学习笔记(MD版)

    概要 Java中如何创建自定义的注解学习笔记(MD版). 博客 博客地址:IT老兵驿站. 前言 记得这篇笔记还是在泉州的龙玲酒店记录的,是一个周六的晚上,坐飞机从上海到泉州,从笔记中能勾起一些旅游的回 ...

  7. MySQL高级学习笔记(四)

    文章目录 MySQL高级学习笔记(四) 1. MySql中常用工具 1.1 mysql 1.1.1 连接选项 1.1.2 执行选项 1.2 mysqladmin 1.3 mysqlbinlog 1.4 ...

  8. mysql新增表字段回滚_MySql学习笔记四

    MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...

  9. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  10. python学习笔记4(对象/引用;多范式; 上下文管理器)

    python学习笔记4(对象/引用:多范式; 上下文管理器) ### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 21. 动态类型:对象/引用 对象和引用: 对象是 ...

最新文章

  1. 12-CoreData操作大量数据时的注意细节
  2. One order search dynamic SQL build logic
  3. Javascript 调试技巧
  4. 第 5-7 课:Java 中的各种锁和 CAS + 面试题
  5. mysql geometry 附近的人_mysql中geometry类型的简单使用(搜索附近的人)
  6. php 模型 关联,PHP模型关联一对多如何给关联表加条件?
  7. Reading Club·Beijing第1期DeepQA框架与Siri架构会场笔记(PPT下载)
  8. python连接mongodb的库文件pymongo
  9. pc计算机怎么设置域名管理,如何设置域名的DNS服务器 -电脑资料
  10. Kaggle 商品销量预测季军方案出炉,应对时间序列问题有何妙招
  11. Linux内核部件分析 连通世界的list
  12. SQL server 数据导入导出BCP工具使用详解
  13. sendip linux发包工具
  14. 偏最小二乘法(NIPALS经典实现--未简化)
  15. pandas 错误 ValueError: ‘Lengths must match to compare‘
  16. arm mali 天梯图_手机CPU天梯图2017年上半年新版 2017手机cpu性能排行天梯图
  17. akka kafka java_Jay Kreps谈基于Apache Kafka和Kafka Streams的分布式流处理
  18. Ansible自动化运维工具安装及使用
  19. 常微分方程的差分方法C语言,常微分方程差分方法.ppt
  20. 有道云笔记 协作android版,有道云笔记Android版升级_软件资讯软件快报-中关村在线...

热门文章

  1. Windows10开机自动登录账号,设置指定账户自动登录系统
  2. 保险核保、理赔|门诊住院发票识别||医疗单据医疗票据识别技术
  3. c语言乘方程序,C语言求幂计算的高效解法
  4. 分享9个加快houdini渲染的技巧,快来学习一下
  5. 利用微信搜索抓取公众号文章(转载)
  6. c语言memcmp函数详解,C语言之memcmp()函数
  7. C语言是否能用memcmp函数比较结构体
  8. 做数据分析为何要学统计学(1)——样本分布
  9. 网站图片挂马检测及PHP与python的图片文件恶意代码检测对比
  10. docker 访问宿主机网络