AutoMapper 帮我我们方便管理物件跟物件之间属性值格式转换

模型转换

这里有两个类别

UserInfoModel 当作我们从DB捞取出来模型资料

public class UserInfoModel
{
public int RowId { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}

  

UserInfoViewModel 是呈现在UI或其他地方的模型

其中  Detail栏位由  UserInfoModel NameAge属性组成的

public class UserInfoViewModel
{
public string Detail { get; set; }
}

  这时我们就会引用AutoMapper 帮我们统一管理转换模型上的问题

建立一个Profile

设置UserInfoModel对于UserInfoViewModel之前的栏位转换

public class UserInfoProfile : Profile
{
public UserInfoProfile()
{
CreateMap<UserInfoModel, UserInfoViewModel>()
.ForMember(t => t.Detail,
s => s.MapFrom(_ => $"DetailInfo:{_.Name} {_.Age}"));
}
}

  而我们在注册时会呼叫AddProfile方法

Mapper.Initialize(x => x.AddProfile<UserInfoProfile>());

  但每次新加Profile这边都需要设置新的Profile,我们就会想有没有方法可以让他自动注册?

我们可以使用反射来完成

反射自动注册AutoMapper Profile

此程式我使用我的 ExtenionTool

var profiles =  Assembly.GetExecutingAssembly()
.GetInstancesByAssembly<Profile>(); foreach (var profile in profiles)
{
Mapper.Initialize(x => x.AddProfile(profile));
}

  上面程式码很简单清晰,呼叫  取得目前组件所有的  物件实体并且加到中,我们将上面程式码在初始化执行一次GetInstancesByAssembly()ProfileProfile

public static IEnumerable<TResult> GetInstancesByAssembly<TResult>(this Assembly ass)
{
return ass.GetTypes()
.Where(x => typeof(TResult).IsAssignableFrom(x) && x.IsNormalClass())
.Select(x => Activator.CreateInstance(x))
.Cast<TResult>();
}

  

核心程式使用Linq 动态取得你所需的类型并使用反射创建

之后我们就可以不用在手动把Profile加至AutoMapper容器中了

[AutoMapper]反射自动注册AutoMapper Profile的更多相关文章

  1. TransactionScope事务处理方法介绍及.NET Core中的注意事项 SQL Server数据库漏洞评估了解一下 预热ASP.NET MVC 的VIEW [AUTOMAPPER]反射自动注册AUTOMAPPER PROFILE

    TransactionScope事务处理方法介绍及.NET Core中的注意事项   作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/10170712.ht ...

  2. 从我做起[AutoMapper实现模块化注册自定义扩展MapTo<>()].Net Core 之二

    AutoMapper实现模块化注册自定义扩展MapTo<>() 我们都知道AutoMapper是使用的最多的实体模型映射,如果没有AutoMapper做对象映射那么我们需要想一下是怎么写的 ...

  3. 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析

    作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...

  4. 【转】第5篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+委托回调方法分析

    作者: 牛A与牛C之间 时间: 2013-11-19 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第5篇:Xilium CefGlue 关于 CLR Object 与 JS ...

  5. 网络编程 -- RPC实现原理 -- RPC -- 迭代版本V4 -- 远程方法调用 整合 Spring 自动注册

    网络编程 -- RPC实现原理 -- 目录 啦啦啦 V4——RPC -- 远程方法调用 + Spring 自动注册 服务提供商: 1. 配置 rpc04_server.xml 注入 服务提供商 rpc ...

  6. 制作dll自动注册工具

    记录一个简单的dll自动注册工具制作:主要用到的是DllRegisterServer()方法,其实我们平常注册dll文件内部都会调用这个方法. 这里我就直接写在主程序里面了,需要注意的地方也直接在代码 ...

  7. pb自动注册ole控件

    方法一:  1.手工注册OCX控件 将该控件随程序一起发布,然后,将此文件拷到windows\system,或者直接放在本运行目录,然后执行dos命令,run( "regsvr32   *. ...

  8. C#实现Dll(OCX)控件自动注册的两种方法 网上找的 然后 自己试了试 还是可以用的

    尽管MS为我们提供了丰富的.net framework库,我们的程序C#开发带来了极大的便利,但是有时候,一些特定功能的控件库还是需要由第三方提供或是自己编写.当需要用到Dll引用的时候,我们通常会通 ...

  9. 在 node.js 的 express web 框架中自动注册路由

    该方法主要是动态注册自己写的 router . 注册器 router 文件名为 loader.js  . var express = require('express'); var fs = requ ...

随机推荐

  1. 11-类中的__call__函数

    __call__是一个很神奇的特性,只要某个类型中有__call__方法,,我们可以把这个类型的对象当作函数来使用. 举例: >>>class Reader(): def __ini ...

  2. PHP 如何获取客户端ip地址

    PHP 如何获取客户端ip地址 一.总结 一句话总结:主要是使用$_SERVER的 REMOTE_ADDR 和 HTTP_X_FORWARDED_FOR 两个属性,在用户使用不同代理的时候这两个属性可 ...

  3. Mysql 数据库日志与数据文件分开

    参考:https://blog.csdn.net/jiao_fuyou/article/details/78366621 myql默认配置情况下,二进制日志文件是保存在默认的数据目录 data 下,如 ...

  4. jieba库的使用和好玩的词云

    1.jieba库基本介绍 (1).jieba库概述 jieba是优秀的中文分词第三方库 - 中文文本需要通过分词获得单个的词语         - jieba是优秀的中文分词第三方库,需要额外安装 - ...

  5. vue父子组件的传值总结

    久违的博客园我又回来了.此篇文章写得是vue父子组件的传值,虽然网上已经有很多了.写此文章的目的就是记录下个人学习的一部分.接下来我们就进入主题吧! 在开发vue项目中,父子组件的传值是避免不掉的. ...

  6. python django连接错误

    提示: connection.alias,django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0 ...

  7. jsp页面输出当前时间

    <% out.print(new java.text.SimpleDateFormat("yyyy年MM月dd号 hh:mm:ss").format(new Date())) ...

  8. 使用logstash同步mysql数据到elasticsearch

    下载 logstash tar -zxvf https://artifacts.elastic.co/downloads/logstash/logstash-6.3.2.tar.gz .tar.gz ...

  9. 983. Minimum Cost For Tickets

    网址:https://leetcode.com/problems/minimum-cost-for-tickets/ 参考:https://leetcode.com/problems/minimum- ...

  10. 双目深度估计传统算法流程及OpenCV的编译注意事项

    起因: 1. 双目立体视觉中双目深度估计是非常重要且基础的部分,而传统的立体视觉的算法基本上都在opencv中有相对优秀的实现.同时考虑了性能和效率.因此,学习使用opencv接口是非常重要的. 2. ...