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

AutoMapper 9.0的改造相关推荐

  1. AutoMapper 9.0的改造(续)

    上一篇有一个读者,有疑问,如何自动化注册Dto 我开篇,做了一个自动化注册的 public sealed class AutoInjectAttribute : Attribute{public Ty ...

  2. AutoMapper 8.0的应用--动态配置

    AutoMapper 8.0中,需要使用configure来配置mapper.为此,实现动态的类型配置如下 public static class AutoMapHelper     {        ...

  3. AutoMapper 9.0的使用

    AutoMapper于2019.8.12升级9.0 从此不再支持静态的对象转换 自己琢磨了一下,写了一套扩展 官方链接如下 https://github.com/AutoMapper/AutoMapp ...

  4. mercurymw305r虚拟服务器,Mercury MW305R v3.0 路由器改造 LEDE(OpenWRT)

    說明 1. 改造 Mercury MW305R v3.0(芯片 9533) 2. OpenWRT 版本:LEDE 17 3. 環境:Ubuntu 16.04 x64 第一步:修改硬件 1. 換 RAN ...

  5. Mercury MW305R v3.0 路由器改造 LEDE(OpenWRT)

    说明 1. 改造 Mercury MW305R v3.0(芯片 9533) 2. OpenWRT 版本:LEDE 17 3. 环境:Ubuntu 16.04 x64 第一步:修改硬件 1. 换 RAN ...

  6. Micro Framework 3 0模拟器改造

    Micro Framework 3.0的SDK去年十月份就已经发布了,本打算在该SDK发布之后就把我以前开发的,可支持GPIO.I2C.SPI测试的模拟器同步升级为3.0版,以便早点支持VS2008( ...

  7. yii mysql 查询 类型转换_Yii2.0 API改造(返回数据库对应字段数据类型)

    namespace common\ext;useYii;useyii\base\InvalidConfigException;useyii\base\NotSupportedException;use ...

  8. 如何 0 改造,让单体/微服务应用成为 Serverless Application

    作者 | 陈涛(毕衫) 来源|阿里巴巴云原生公众号 一.天然云原生的 Serverless 1. 云原生时代 随着 2013 年以 Docker 为代表的容器技术.CNCF 基金会以及 K8s 的发展 ...

  9. 0 改造,让单体/微服务应用成为 Serverless Application

    作者 | 陈涛(毕衫) 责编 | 寇雪芹 头图 | 下载于视觉中国 天然云原生的 Serverless 1. 云原生时代 随着 2013 年以 Docker 为代表的容器技术.CNCF 基金会以及 K ...

最新文章

  1. JS怎么刷新当前页面
  2. 将近一半的用户希望能够在两秒内或者更短的时间内打开网站
  3. centos7双网卡,一个连公网,一个连内网
  4. 自定义Chrome插件Vimium
  5. 1284:摘花生《信息学奥赛一本通》
  6. 基于JAVA+Swing+MYSQL的水果超市管理系统
  7. php读取excel写入数据库,PHP读取EXCEL文件写入数据库
  8. 测试远程服务器udp端口,udp端口怎么测试 - 全文
  9. 嵌入式高速串行并行技术_推荐(张锋)
  10. PAT 1013 数素数
  11. 怎么打开计算机开机启动菜单,计算机怎么添加多系统启动菜单?
  12. 泡泡龙游戏的完整制作流程
  13. 学驾照,科目一计分题
  14. 真实的上海IT圈:张江男vs漕河泾男
  15. RFID到底是什么技术
  16. 如何替换 JavaScript 中所有出现的字符串
  17. 推荐算法实践-章节三-推荐系统冷启动问题-阅读总结
  18. “格式化”到底是啥意思?
  19. 为什么那么多人想开发一元夺宝类app?
  20. 浓缩德国奎尔鱼油 (QÜELL FISH OIL™ HIGHT EPA / DHA / D)

热门文章

  1. C++从0到1的入门级教学(十二)——运算符重载
  2. Linux进程状态解析之R、S、D、T、Z
  3. INI文件读写--VC6.0
  4. [react] 如何更新组件的状态?
  5. Taro+react开发(7)--控制跳转
  6. 前端学习(3153):react-hello-react之脚手架文件介绍
  7. [html] 如何扩大CheckBox点击区域
  8. [html] 切页面时,每次都动手刷新看效果很麻烦,如果要让你写一个实时刷新预览的工具你该怎么写?
  9. [css] 举例说明时间、频率、角度、弧度、百分度的单位分别是哪些?
  10. 前端学习(2763):基本的数据绑定