AutoMapper在ABP框架中的使用说明
為了說(shuō)明AutoMapper如何使用,我專(zhuān)門(mén)開(kāi)設(shè)了一個(gè)專(zhuān)題來(lái)講,如果您還沒(méi)有查看該專(zhuān)題,請(qǐng)點(diǎn)擊這里。既然系統(tǒng)地學(xué)習(xí)了AutoMapper,那么接下來(lái)就是該用它實(shí)戰(zhàn)的時(shí)候了。今天,我們就來(lái)揭開(kāi)AutoMapper如何在ABP框架中使用的面紗。
因?yàn)檫@里演示的是用ABP框架搭建的項(xiàng)目,本博客的講解的前提是假設(shè)你有了ABP基礎(chǔ),所以,如果您還不了解ABP框架,請(qǐng)查看我的ABP框架的系列博客,請(qǐng)點(diǎn)擊這里。
下面正式開(kāi)始今天的講解。
首先,讓我們稍微回憶一下AutoMapper的知識(shí)點(diǎn)。
問(wèn):什么是AutoMapper?
答:AutoMapper翻譯過(guò)來(lái)就是“自動(dòng)映射工具”。它的作用就是將一個(gè)源類(lèi)型映射成一個(gè)目標(biāo)類(lèi)型,比如Person——>PersonDto,User——>UserDto。
問(wèn):什么情況下使用AutoMapper?
答:一般在項(xiàng)目的開(kāi)發(fā)中,經(jīng)常需要將Entity實(shí)體映射成ModelDto或者ViewModel,這個(gè)時(shí)候,使用AutoMapper僅需要簡(jiǎn)單的配置,就可以實(shí)現(xiàn)這些需求,非常方便。
接下來(lái),講一下項(xiàng)目中的具體配置。
在我的ABP項(xiàng)目中,首先核心層有一個(gè)實(shí)體類(lèi)TerminalDevices,類(lèi)定義如下:
?View Code可以看到,僅一個(gè)實(shí)體類(lèi),就要將近300行的代碼,但是在服務(wù)層或者展現(xiàn)層使用的時(shí)候,有些屬性是不需要的,所以這時(shí)我們就要定義我們的Dto類(lèi)了。
隨后,我在ABP項(xiàng)目中的服務(wù)層定義了一個(gè)對(duì)應(yīng)的TerminalDeviceDto類(lèi),定義如下:
?View Code當(dāng)然,這里的Dto類(lèi)定義的屬性跟你的具體業(yè)務(wù)相關(guān),定義的屬性還可能更少。
上面講的是源類(lèi)型和目標(biāo)類(lèi)型的定義,下面開(kāi)始講它們之間的映射配置。
首先,我在應(yīng)用服務(wù)層新建一個(gè)文件夾取名“AutoMapper”,里面放跟AutoMapper配置相關(guān)的東西。
如圖,新建一個(gè)類(lèi)TerminalDeviceProfile(CityProfile類(lèi)是我的另一個(gè)實(shí)體類(lèi)對(duì)應(yīng)的AutoMapper配置文件),定義如下:
namespace Noah.ChargeStation.Application.AutoMapper {public class CityProfile:Profile{protected override void Configure(){Mapper.Initialize(cfg =>{cfg.CreateMap<Cities, CityDto>();});}} }如果您對(duì)這么配置不清楚原因,請(qǐng)查看我的AutoMapper系列教程,點(diǎn)擊查看。
再創(chuàng)建一個(gè)AutoMapperWebConfig靜態(tài)類(lèi),定義如下:
namespace Noah.ChargeStation.Application.AutoMapper {public static class AutoMapperWebConfig{public static void Configure(){Mapper.Initialize(cfg =>{cfg.AddProfile<CityProfile>();cfg.AddProfile<TerminalDeviceProfile>();});Mapper.AssertConfigurationIsValid();//驗(yàn)證所有的映射配置是否都正常 }} }接下來(lái),在應(yīng)用服務(wù)層的模塊類(lèi)中調(diào)用該靜態(tài)類(lèi)的靜態(tài)方法,加載所有的AutoMapper配置信息。
namespace Noah.ChargeStation.Application {[DependsOn(typeof(ChargeStationCoreModule), typeof(AbpAutoMapperModule))]public class ChargeStationApplicationModule : AbpModule{public override void Initialize(){IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());AutoMapperWebConfig.Configure();//一次性加載所有映射配置 }} }這里需要注意的是,AutoMapper的配置一般放在項(xiàng)目啟動(dòng)的時(shí)候進(jìn)行加載且只加載一次就夠了,而在ABP框架搭建的項(xiàng)目中,除了展現(xiàn)層(Web和WebAPI層),其他層都會(huì)有一個(gè)Module類(lèi)(類(lèi)名以Module結(jié)尾)。這些類(lèi)都重寫(xiě)了父類(lèi)AbpModule的Initialize方法,旨在模塊初始化的時(shí)候調(diào)用,這樣,映射的配置也在模塊初始化的時(shí)候完成了。如果在一般的ASP.Net項(xiàng)目中,應(yīng)該在全局配置文件Global.asax中的Application_Start方法中調(diào)用AutoMapper的配置方法,其他項(xiàng)目類(lèi)似。
以后,想要添加配置信息時(shí),只需要定義相應(yīng)的XXProfile類(lèi),然后在AutoMapperWebConfig類(lèi)中添加配置文件類(lèi)就可以了。
本文轉(zhuǎn)自tkbSimplest博客園博客,原文鏈接:http://www.cnblogs.com/farb/p/4973910.html,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的AutoMapper在ABP框架中的使用说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java爬虫搜索原理实现
- 下一篇: 使用mount挂载一个windows的共