AutoMapper 9.0的改造

AutoMapper于2019.8.12升级9.0

从此不再支持静态的对象转换

自己琢磨了一下,写了一套扩展

官方链接如下

https://github.com/AutoMapper/AutoMapper/tree/v9.0.0

我做了一下方便使用的简单封装

    public static class AutoMapperExtension{public static IServiceCollection AddAutoMapper(this IServiceCollection service){service.TryAddSingleton<MapperConfigurationExpression>();service.TryAddSingleton(serviceProvider =>{var mapperConfigurationExpression = serviceProvider.GetRequiredService<MapperConfigurationExpression>();var instance = new MapperConfiguration(mapperConfigurationExpression);instance.AssertConfigurationIsValid();return instance;});service.TryAddSingleton(serviceProvider =>{var mapperConfiguration = serviceProvider.GetRequiredService<MapperConfiguration>();return mapperConfiguration.CreateMapper();});return service;}public static IMapperConfigurationExpression UseAutoMapper(this IApplicationBuilder applicationBuilder){return applicationBuilder.ApplicationServices.GetRequiredService<MapperConfigurationExpression>();}}

调用则是在ConfigureServices方法内增加一行

services.AddAutoMapper();

在Configure方法内增加如下代码

            var expression = app.UseAutoMapper();expression.CreateMap<Foo, FoodDto>();

这样就完成了DI版本的AutoMapper

调用例子代码如下

    public class ValuesController : ControllerBase{private IMapper Mapper { get; }public ValuesController(IMapper mapper){Mapper = mapper;}// GET api/values
        [HttpGet]public FoodDto Get(){var model = new Foo(){Id = Guid.NewGuid(),Name = "test",Money = 15.0m};return Mapper.Map<FoodDto>(model);}}

测试结果如下

 

但是仅仅是这样不够的,方便使用的话,还需要一个静态Helper

代码如下

    public static class AutoMapperHelper{private static IServiceProvider ServiceProvider;public static void UseStateAutoMapper(this IApplicationBuilder applicationBuilder){ServiceProvider = applicationBuilder.ApplicationServices;}public static TDestination Map<TDestination>(object source){var mapper = ServiceProvider.GetRequiredService<IMapper>();return mapper.Map<TDestination>(source);}public static TDestination Map<TSource, TDestination>(TSource source){var mapper = ServiceProvider.GetRequiredService<IMapper>();return mapper.Map<TSource, TDestination>(source);}}

同理在Configure方法内增加一行代码

app.UseStateAutoMapper();

增加一个Action调用一下

        [HttpGet("Static")]public FoodDto Static(){var model = new Foo(){Id = Guid.NewGuid(),Name = "test",Money = 15.0m};return AutoMapperHelper.Map<FoodDto>(model);}

调用结果如下

 

大功告成,其实这次更新只是一个思路上的转变,便捷性,都只是小事儿而已

 


应邀在某个汪姓大佬的要求下,增加两个扩展方法

    public static class AutoMapperHelper{...public static TDestination MapTo<TSource, TDestination>(this TSource source){var mapper = ServiceProvider.GetRequiredService<IMapper>();return mapper.Map<TSource, TDestination>(source);}public static TDestination MapTo<TDestination>(this object source){var mapper = ServiceProvider.GetRequiredService<IMapper>();return mapper.Map<TDestination>(source);}}

测试例子改为

        [HttpGet("Static")]public FoodDto Static(){var model = new Foo(){Id = Guid.NewGuid(),Name = "test",Money = 15.0m};return model.MapTo<FoodDto>();}//[HttpGet("Static")]//public FoodDto Static()//{//    var model = new Foo()//    {//        Id = Guid.NewGuid(),//        Name = "test",//        Money = 15.0m//    };//    return model.MapTo<Foo, FoodDto>();//}

 

转载于:https://www.cnblogs.com/NCoreCoder/p/11359294.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10电脑插耳机没声音_电脑没有声音是什么原因 教您电脑突然没声音怎么解决...

在日常生活中在使用电脑中经常遇到电脑没声音的小麻烦&#xff0c;有时候选择重装系统也解决不了该问题&#xff0c;其实不必烦恼的&#xff0c;当出现电脑没声音的现象时&#xff0c;我们首先要寻找出电脑没声音是什么原因造成的。然后根据电脑没声音的原因来寻求解决办法。下…

机械动作时序图怎么画_人物动作怎么画?动漫绘画人物姿势的基本画法!

人物动作怎么画&#xff1f;怎样才能画好动漫人物姿势&#xff1f;画好动漫人物姿势有哪些技巧&#xff1f;想必这些问题都是绘画初学者们比较伤脑筋的问题&#xff0c;那么到底怎样才能画好动漫人物姿势呢&#xff1f;今天就在网络上收集整理了关于人物动作怎么画&#xff1f;…

vCenter线上操作磁盘扩容

以下截图是生产机器&#xff0c;目前是有一块盘&#xff0c;且根分区是/dev/sda3&#xff0c;因为磁盘不足&#xff0c;需要备份的数据要远远超过此时的空间大小&#xff1b;正常情况下&#xff0c;是可以新增硬盘硬盘作为备份 但是作为宿主机下的虚机&#xff0c;因为一些不规…

邮箱无权访问 上的 jira是怎么回事_蚂蚁庄园答案2020年11月6日汇总 小鸡宝宝考考你每日答案为你呈上|蚂蚁|庄园-360GAME...

川北在线核心提示&#xff1a;原标题&#xff1a; 蚂蚁庄园答案2020年11月6日汇总 小鸡宝宝考考你每日答案为你呈上 支付宝蚂蚁庄园小课堂11月6日答案是什么呢&#xff1f;2020年11月6日支付宝蚂蚁庄园小课堂题目是健身过后什么时候吃饭更适宜&#xff1f;等等相信有不少用户都…

bmp怎么编辑底色_非标机械设计这个行业前景怎么样

今天就不分享技术点了&#xff0c;主要和大家谈谈非标机械设计这个行业的前景怎么样&#xff0c;非标机械设计&#xff0c;就是根据客户提供的样板或者提出的要求来订做设计的。相信还有很多人对这个词感到很陌生&#xff0c;提起来也只是大概知道它是一种什么东西&#xff0c;…

android 发短信 调到联系人

原文找不到了。看了别人的一些。自己加了一点。做一个代码备份。自己看就可以了。先上一下图吧。看看一效果。 通过上边选择联系人。把选择过的联系显示到EditView 中。而发送短信时。可以获取联系人的电话号码。 发短信的的类SendmessageActivity.java package com.hkrt.actio…

优麒麟桌面闪烁_稳定性持续增强,优麒麟 19.10.1 发布

优麒麟开源操作系统通过研发用户友好的桌面环境以及特定需求的应用软件&#xff0c;为全球用户提供更稳定更易用的 Linux 开源桌面操作系统。此次发布的优麒麟 19.10.1 版本为更新版本&#xff0c;内核版本升级至5.3.0.19.22&#xff0c; 火狐浏览器升级至70.0 版本&#xff0c…

智能机器人及其应用ppt课件_机器人视觉技术在建筑智能化生产中的应用

近年来&#xff0c;随着工业智能化的发展&#xff0c;有许多智能施工机器人走向了建筑领域&#xff0c;但是这些机器人在建筑行业相关部件产线推进过程中&#xff0c;发现传统的机器人应用方法不能很好的满足实际生产的需求。例如建筑行业的钢结构部件&#xff0c;都是些大型且…

云计算第二阶段shell脚本

pstree           #查看进程树 cat /etc/shells           #查看系统安装的所有shell解释器 yum -y install ksh  #安装新的解释器 一、shell脚本的结构 1、声明解释器 #!/bin/bash 2、注释脚本的…

做系统ghost步骤图解_用好这工具,小孩都能会重装系统!

之前“事儿哥”曾给小伙伴们介绍过一款bios模拟器&#xff0c;(点击查看《比游戏模拟器罕见一百倍&#xff01;99%的人没见过&#xff01;真实用&#xff01;》)&#xff0c;让你可以轻松模拟操作bios&#xff0c;而不影响真实的电脑&#xff0c;不怕把电脑弄坏了&#xff01;今…

git 为什么不能断点_跟我一起学docker(九)--持续系统集成了解下git

什么是持续集成&#xff1f;持续集成(Continuous integration&#xff0c;简称CI)。根据敏捷大师Martin Fowler的定义&#xff0c;“持续集成是一种软件开发实践。在持续集成中&#xff0c;团队成员频繁集成他们的工作成果&#xff0c;一般每人每天至少集成一次&#xff0c;也可…

selenium定位元素的方法_selenium定位元素之冻结窗口

我们在使用selenium进行元素定位的时候&#xff0c;会发现有很多需要操作的元素是随着鼠标移动与移出才会显示与隐藏&#xff0c;不能通过页面窗口实时看到自己的定位是否准确。这就给我们定位工作带来了一些困扰。这种情况下我们可以采用冻结当前窗口方式&#xff0c;以达到自…

DB Query Analyzer中的事务管理在DB2中的应用

DB Query Analyzer中的事务管理在DB2中的应用 马根峰 ( 广东联合电子收费股份有限公司, 广州 510300) 摘要 事务控制是数据库应用系统中的关键技术之一&#xff0c;概述了事务控制的概念以及《DB Query Analyzer》中的事务控制&#xff0c;以一个具体的实例&#xff0c;给…

servlet返回数据给html_Servlet 简介

Servlet 简介 博客说明 文章所涉及的资料来自互联网整理和个人总结&#xff0c;意在于个人学习和经验汇总&#xff0c;如有什么地方侵权&#xff0c;请联系本人删除&#xff0c;谢谢&#xff01; 简介 Java Servlet 是运行在 Web 服务器或应用服务器上的程序&#xff0c;它是作…

linux 64位 寻址空间_Ubuntu 20.04(64位)如何配置gcc-3.4用于编译linux-0.11

首先下载gcc-3.4地址&#xff1a;http://old-releases.ubuntu.com/ubuntu/pool/main/g/gcc-3.4/下载三个文件&#xff0c;分别是cpp-3.4_3.4.6-6ubuntu2_amd64.debgcc-3.4-base_3.4.6-6ubuntu2_amd64.debgcc-3.4_3.4.6-6ubuntu2_amd64.deb也可打开想要保存到的文件夹后&#xf…

发布一个jQuery插件:formStorage

中午休息时,没有睡意,没事写了个jquery插件:formStorage. 原理很简单,通过本地存储机制(userData或者localStorage),存储表单中元素的状态到本地. 需要时可以把所存储的状态还原到表单元素上. 其中也用了json数据格式, 之前想对插件中所需的功能,从零开始写,但是觉得太冗余,没必…

判断一个java对象中的属性是否都未赋值_100道Java基础面试题(一)

100道Java基础面试题(一)未来大家将步入职场&#xff0c;面试的时候面试官还会问大家一些Java相关的问题。小编整理出100道非常实用的面试题目&#xff0c;可以帮助双体的小伙伴应对面试&#xff0c;我们一起来看看都有哪些吧&#xff01;1.什么是B/S架构&#xff1f;什么是C/S…

电脑cpu温度过高怎么办_网络资讯:电脑cpu占用过高处理办法

今天来说一下电脑cpu占用过高处理办法这方面的一些讯息&#xff0c;不少朋友对电脑cpu占用过高处理办法这方面的一些讯息颇感兴趣的&#xff0c;小编今天就整理了一些信息&#xff0c;希望对有需要的朋友有所帮助。1、安装并使用杀毒软件全面杀毒;2、优化系统自启动软件;3、把软…

大型企业用什么orm_生产企业ERP有什么用

原标题&#xff1a;生产企业ERP有什么用生产企业ERP有什么用&#xff1f;随着我国经济的快速发展&#xff0c;这促使了许多企业或转型开发新的业务模式&#xff0c;以更快速度迈向新兴前沿领域。在这样的环境下&#xff0c;许多的生产型企业对ERP系统进行了实施。生产企业ERP到…

怎么测试网络带宽_性能测试案例与经验分享

性能基准测试性能基准测试&#xff0c;通常被称为 Performance Benchmark Test&#xff0c;是每次对外发布产品版本前必须要完成的测试类型。性能基准测试&#xff0c;会基于固定的硬件环境和部署架构&#xff08;比如专用的服务器、固定的专用网络环境、固定大小的集群规模、相…