【aspnetcore】在asp.net core中配置使用AutoMapper
网上使用AutoMapper的文章很多,就不多说了。这里主要记录一下怎么在项目中配置和使用。
首先是从NuGet获取AutoMapper。
在Startup.cs文件中注册AutoMapper服务
public void ConfigureServices(IServiceCollection services)
{
services.AddAutoMapper();
}
一般把AutoMapper的映射关系单独写在一个Profile文件,比如个人习惯在Service层添加一个ServiceProfile.cs文件(这是因为所有的实体和Dto都是在Service层定义的),可能的样子如下:
public class ServiceProfiles : Profile
{
public ServiceProfiles()
{
CreateMap<WxAccount, WxAccountSessionDto>();
CreateMap<WxNews, WxNewsListDto>();
CreateMap<WxMessage, WxMessageListDto>()
.ForMember(w => w.MatchType, opts =>
{
opts.ResolveUsing<WxMessageListDtoResolver>();
});
}
}
这个文件也没什么好说的,必须继承自AutoMapper.Profile,在构造函数中创建映射关系,具体使用可看看其他大神的文章,这里就不班门弄斧了。
接下来就是最后一步,在项目中使用定义的ServiceProfile,AutoMapper提供了一个Initialize方法,具体用法如下:
Mapper.Initialize(cfg =>
{
cfg.AddProfile<ServiceProfiles>();
});
这里要注意这句代码的位置,要写在Startup.cs的构造函数内
public Startup(IConfiguration configuration)
{
Configuration = configuration; LoggerRepository = LogManager.CreateRepository("NETCoreRepository");
XmlConfigurator.Configure(LoggerRepository, new FileInfo(Environment.CurrentDirectory + "\\Config\\log4net.config")); Mapper.Initialize(cfg =>
{
cfg.AddProfile<ServiceProfiles>();
});
Mapper.AssertConfigurationIsValid();
}
之前就是因为把初始化代码写在ConfigureServices方法内导致配置项不起作用,特此标记。
上面的理解有误,请参考下面的说明:
一般来讲,在ConfigureServices中注册AutoMapper服务只要如下代码即可:
services.AddAutoMapper();
AutoMapper会从程序集中搜索Profile的子类,然后把这些子类加入到配置中。如果Profile文件是在当前程序中定义,那没有问题,但如果是写在外部类库内,则是搜索不到的,所以类似我的做法,把Profile定义在类库内,需要手动把配置文件加入到AutoMapper的配置中,如下:
services.AddAutoMapper(cfg =>
{
cfg.AddProfile(typeof(ServiceProfiles));
});
但是,如果仅仅这样,如同我上面的ServiceProfile是不能正确运行的,因为我定义了一个 WxMessageListDtoResolver 这样一个 IValueResolver 接口的实现,说到这里大家应该猜到,AutoMapper没法自动调用这个实现,需要我们添加注入,所以还要加入这样一句
services.AddSingleton<WxMessageListDtoResolver>();
这样程序就可以正常使用了。
但是,想象一下,如果我们的类库中如果定义了很多IValueResolver,是不是每个都要注册一次呢,想想都是噩梦,所以,这里还有一个办法,就是使用Mapper的Initialize方法,提前把Profile传递进去,再调用AddAutoMapper时,会自动将所有的Profile内用到的几个接口如IValueResolver,IMemberValueResolver的实现注入到程序,这样就可以了。所以,我之前的理解是错误的,并不需要把Initialize写到Startup的构造函数内,只要在AddAutoMapper之前就可以了。
所以,建议的写法,在ConfigureServices方法内:
Mapper.Initialize(cfg =>
{
cfg.AddProfile<ServiceProfiles>();
}); services.AddAutoMapper();
结束,谢谢~
【aspnetcore】在asp.net core中配置使用AutoMapper的更多相关文章
- Asp.Net Core中配置使用Kindeditor富文本编辑器实现图片上传和截图上传及文件管理和上传(开源代码.net core3.0)
KindEditor使用JavaScript编写,可以无缝的于Java..NET.PHP.ASP等程序接合. KindEditor非常适合在CMS.商城.论坛.博客.Wiki.电子邮件等互联网应用上使 ...
- 在Asp.Net Core中配置使用MarkDown富文本编辑器实现图片上传和截图上传(开源代码.net core3.0)
我们的富文本编辑器不能没有图片上传尤其是截图上传,下面我来教大家怎么实现MarkDown富文本编辑器截图上传和图片上传. 1.配置编辑器到html页 <div id="test-edi ...
- ASP.NET Core中配置监听URLs的五种方式
原文: 5 ways to set the URLs for an ASP.NET Core app 作者: Andrew Lock 译者: Lamond Lu 默认情况下,ASP. NET Core ...
- 一劳永逸:域名支持通配符,ASP.NET Core中配置CORS更轻松
ASP.NET Core 内置了对 CORS 的支持,使用很简单,只需先在 Startup 的 ConfigureServices() 中添加 CORS 策略: public void Configu ...
- 一劳永逸:域名支持通配符,ASP.NET Core中配置CORS
ASP.NET Core 内置了对 CORS 的支持,使用很简单,只需先在 Startup 的 ConfigureServices() 中添加 CORS 策略: public void Configu ...
- 在Asp.Net或.Net Core中配置使用MarkDown富文本编辑器有开源模板代码(代码是.net core3.0版本)
研究如何使用Markdown你们可能要花好几天才能搞定,但是看我的文章或者下载了源码,你搞定一般在10分钟之内.我先给各位介绍下它: Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯 ...
- ASP.NET Core Web 应用程序系列(五)- 在ASP.NET Core中使用AutoMapper进行实体映射
本章主要简单介绍下在ASP.NET Core中如何使用AutoMapper进行实体映射.在正式进入主题之前我们来看下几个概念: 1.数据库持久化对象PO(Persistent Object):顾名思义 ...
- ASP.NET Core 中jwt授权认证的流程原理
目录 1,快速实现授权验证 1.1 添加 JWT 服务配置 1.2 颁发 Token 1.3 添加 API访问 2,探究授权认证中间件 2.1 实现 Token 解析 2.2 实现校验认证 1,快速实 ...
- ASP.NET Core中的数据保护
在这篇文章中,我将介绍ASP.NET Core 数据保护系统:它是什么,为什么我们需要它,以及它如何工作. 为什么我们需要数据保护系统? 数据保护系统是ASP.NET Core使用的一组加密api.加 ...
随机推荐
- 自定义标签(客户化jsp标签)
客户化jsp标签技术是在jsp1.1版本中才出现的,他支持用户在jsp文件中自定义标签,这样可以使jsp代码更加简单,这些可重用的标签能够处理复杂的逻辑运算和事物或定义jsp网页的输出内容和格式. 创 ...
- hdu-4991 Ordered Subsequence(dp+树状数组)
题目链接: Ordered Subsequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- NLP任务中的基本指标(precision and recall )
>>以下内容参考wikipedia. https://en.wikipedia.org/wiki/Precision_and_recall 精确度 precision = (true p ...
- 物理机装kali复盘
复盘总结 最近把旧电脑想刷成kali的单系统,便下载了最新版本的kali 2018.1 的镜像文件.由此出现了很多问题. 首先在制作启动盘的时候,我用了很多软件,比如Ultriso,rufus,uni ...
- MongoDB:搭建三节点 Replica Set 环境
今天学习了搭建 MongDB 复制环境,实验环境是在虚拟机上同一系统,并搭建三节点 Replica Set,根据文档上的描述,mongodb 复制配置简单,并且能够自动 failover,这些高级特性 ...
- sql语句之约束条件
not null约束,需设置默认值 sex enum('male','female') not null default 'male' unique 约束,值唯一 单列唯一: create table ...
- c语言编译器内置宏
注:转自http://www.cnblogs.com/lixiaohui-ambition/archive/2012/08/21/2649052.html 感谢分享 前言: 我们在写程序的时候,总是 ...
- spring mvc 处理映射的几种方式
1.Spring MVC bean的nameurl处理映射 <bean class="org.springframework.web.servlet.view.InternalReso ...
- msql 初识数据库
一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中, 毫无疑问, 一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题, 并且假设程序所有 ...
- HTML学习笔记(五)框架
框架 通过使用框架,可以在同一个浏览器窗口中显示多个页面. eg: <frameset rows="50%,50%"> <frame src="/exa ...