AutoMapper 9.0的改造
发布日期:2021-08-13 07:45:06 浏览次数:1 分类:技术文章

本文共 4207 字,大约阅读时间需要 14 分钟。

AutoMapper于2019.8.12升级9.0

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

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

官方链接如下

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

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

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

services.AddAutoMapper();

在Configure方法内增加如下代码

var expression = app.UseAutoMapper();            expression.CreateMap
();

这样就完成了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
(model); } }

测试结果如下

 

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

代码如下

public static class AutoMapperHelper    {        private static IServiceProvider ServiceProvider;        public static void UseStateAutoMapper(this IApplicationBuilder applicationBuilder)        {            ServiceProvider = applicationBuilder.ApplicationServices;        }        public static TDestination Map
(object source) { var mapper = ServiceProvider.GetRequiredService
(); return mapper.Map
(source); } public static TDestination Map
(TSource source) { var mapper = ServiceProvider.GetRequiredService
(); return mapper.Map
(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
(model); }

调用结果如下

 

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

 


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

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

测试例子改为

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

 

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

转载地址:https://blog.csdn.net/weixin_30679823/article/details/101501510 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:logstash增量同步mysql数据到es
下一篇:.Net Core 3.0下AOP试水~~

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月17日 02时11分07秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Calendar导入java,Java程序使用Calendar.add()方法将分钟添加到当前时间 2019-04-21
mysql中用户线程作用,mysql用户线程的建立与用户线程的状态源码解析 2019-04-21
php页面引用公共文件,WeiPHP插件模板中快速引入公共模板文件 2019-04-21
php tracy,admin.php 2019-04-21
php访问父类的所有属性,php – 在父类中使用$this仅在子类中显示父类属性 2019-04-21
oracle比较强大的函数,SQL和ORACLE函数比较 2019-04-21
oracle12c order by,oracle 数据库中order by 的一些高级用法 2019-04-21
oracle8i substr,Oracle中的INSTR,NVL和SUBSTR函数的用法详解 2019-04-21
导出oracle11g的空表,轻松解决oracle11g 空表不能 exp 导出 的问题。 2019-04-21
php把整数拆分成数组,数组拆分处理(整数时的处理),该怎么处理 2019-04-21
oracle numlist,oracle sql str2numlist numtabletype 2019-04-21
php红包平均分配,红包平均分配算法 2019-04-21
linux磁盘的命令是,linux磁盘相关的命令 2019-04-21
linux服务器 缓存,Linux服务器内存使用分析及内存缓存 2019-04-21
linux查进程内存问题,关于linux 查看服务进程内存,cpu,内存占用的一些基础命令... 2019-04-21
linux英文包安装教程视频,Linux源码包安装过程讲解 2019-04-21
linux 关闭rsync服务器,linux下配置rsync服务器和实时同步 2019-04-21
linux初始化TCP服务失败,深入Linux系统追踪TCP初始化 2019-04-21
arch Linux添加源,在Arch Linux系统中使用Archlinuxcn源(清华源)的方法 2019-04-21
私人linux远程连接,Linux远程连接 - osc_5g1gl9wp的个人空间 - OSCHINA - 中文开源技术交流社区... 2019-04-21