上一篇有一个读者,有疑问,如何自动化注册Dto

我开篇,做了一个自动化注册的

    public sealed class AutoInjectAttribute : Attribute{public Type SourceType { get; }public Type TargetType { get; }public AutoInjectAttribute(Type sourceType, Type targetType){SourceType = sourceType;TargetType = targetType;}}

增加了一个特性,在Dto上面打上,参数1是源类型,参数2是Dto类型

增加一个工厂类保存自动转换的类型

    public class AutoInjectFactory{public List<(Type,Type)> ConvertList { get; } = new List<(Type, Type)>();public void AddAssemblys(params Assembly[] assemblys){foreach (var assembly in assemblys){var atributes = assembly.GetTypes().Where(_type => _type.GetCustomAttribute<AutoInjectAttribute>() != null).Select(_type => _type.GetCustomAttribute<AutoInjectAttribute>());foreach (var atribute in atributes){ConvertList.Add((atribute.SourceType, atribute.TargetType));}}}}

在原来的AddAutoMapper上找到修改的代码段

        public static IServiceCollection AddAutoMapper(this IServiceCollection service){...略service.TryAddSingleton(serviceProvider =>{var mapperConfigurationExpression = serviceProvider.GetRequiredService<MapperConfigurationExpression>();var instance = new MapperConfiguration(mapperConfigurationExpression);instance.AssertConfigurationIsValid();return instance;});...略return service;}

改为

        public static IServiceCollection AddAutoMapper(this IServiceCollection service){...略service.TryAddSingleton(serviceProvider =>{var mapperConfigurationExpression = serviceProvider.GetRequiredService<MapperConfigurationExpression>();var factory = serviceProvider.GetRequiredService<AutoInjectFactory>();foreach (var (sourceType,targetType) in factory.ConvertList){mapperConfigurationExpression.CreateMap(sourceType, targetType);}var instance = new MapperConfiguration(mapperConfigurationExpression);instance.AssertConfigurationIsValid();return instance;});...略return service;}

增加一组扩展方法

    public static class AutoMapperExtension{...略public static void UseAutoInject(this IApplicationBuilder applicationBuilder, params Assembly[] assemblys){var factory = applicationBuilder.ApplicationServices.GetRequiredService<AutoInjectFactory>();factory.AddAssemblys(assemblys);}}

在Startup.Configure方法内调用一下

看看测试

增加一个测试控制器

执行结果

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

AutoMapper 9.0的改造(续)相关推荐

  1. AutoMapper 9.0的改造

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

  2. IIS6.0架构(续)

    IIS6.0架构(续) 4.   W3Core 4.1.概述 W3Core又称为工作进程(Worker Process)或W3WP.exe.在默认情况下,IIS 6.0是在工作进程隔离模式下运行的.对 ...

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

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

  4. AutoMapper 9.0的使用

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

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

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

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

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

  7. Micro Framework 3 0模拟器改造

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

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

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

  9. WorkFlow设计篇Step.2—传参的用法-订单金额的处理(续)-WF4.0

    开篇 上一篇,我们开始讲述WF4.0中的设计篇的开始,本系列主要讲述如何结合业务来设计工作流处理流程,并说明如何使用工作流流程来设计完成具体的业务流程处 理过程,将原来的代码处理业务流程,修改成WF可 ...

最新文章

  1. python如何读入dat数据_python二进制dat数据怎么转成txt文本
  2. hdu 3812 Sea Sky 深搜+剪枝
  3. javaScript面向对象编程学习(二)
  4. nssl1216-码灵鼠【数学】
  5. jQuery Ajax
  6. Chapter7-12_Controllable Chatbot
  7. python 函数可以作为容器对象的元素_11.Python初窥门径(函数名,可迭代对象,迭代器)...
  8. ifconfig route 手动设置网卡route路由 示例
  9. vue 页面不置顶问题(页面内操作、页面跳转后) - 集合篇
  10. 条件语句和循环语句_总结一下条件语句和循环语句
  11. 是真的!华为2019年应届博士年薪最高达201万
  12. 6.Prometheus 监控技术与实践 --- 告警处理
  13. 移动应用android简单播放器,打造移动掌上影院 Android播放器横评
  14. MATLAB图像滤波去噪分析及其应用
  15. 手机mtkcdc端口如何开启_MTK驱动安装教程(手机黑屏刷机)
  16. js延时函数--setTimeout
  17. 博科FC光纤交换机详细配置教程
  18. 2007年个人站长/SEOer必上网站
  19. 汉诺塔的非递归实现(借助堆栈模拟递归)
  20. 巴比特 | 元宇宙每日必读:未成年人打赏后要求退款,虚拟主播称自己是大冤种,怎么看待这个监管漏洞?...

热门文章

  1. JAVA如何代码静态检查术语_Sonar代码静态检查规则-JAVA篇(二)
  2. Exynos4412启动过程分析
  3. Mac OS X下查看CPU信息
  4. 删除(.svn)目录
  5. [react] 说说react的生命周期有哪些?
  6. [react] react组件的state和props两者有什么区别?
  7. [html] 举例说明实现文字贯穿线的方法有哪些?
  8. [软技能] 你认为计算专业和非计算机专业的差别在哪?为什么?
  9. [html] 要减少DOM的数量有什么办法吗?
  10. [vue] 在组件中怎么访问到根实例?