.Net Core AutoMapper自定義擴充套件方法的使用
上次我們講了如何在.Net Core下使用AutoMapper,我們採用的是AutoMapper 9.0。上次的方法如下
var dto = _mapper.Map<sys_user, sys_userDto>(q);//_mapper.Map<sys_userDto>(q);
這樣也能用,但這樣程式碼好像麻煩了點,我們現在可以自己定義一個AutoMapperHelper方法讓呼叫變得方便一點。
using AutoMapper;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace MyUtility.AutoMapper {
public static class AutoMapperHelper {
private static IServiceProvider ServiceProvider;
public static void UseStateAutoMapper(this IApplicationBuilder applicationBuilder) {
ServiceProvider = applicationBuilder.ApplicationServices;
}
public static TDestination Map<TDestination>(object source) {
var mapper = ServiceProvider.GetRequiredService<IMapper>();
return mapper.Map<TDestination>(source);
}
public static TDestination Map<TSource, TDestination>(TSource source) {
var mapper = ServiceProvider.GetRequiredService<IMapper>();
return mapper.Map<TSource, TDestination>(source);
}
public static TDestination MapTo<TSource, TDestination>(this TSource source) {
var mapper = ServiceProvider.GetRequiredService<IMapper>();
return mapper.Map<TSource, TDestination>(source);
}
public static TDestination MapTo<TDestination>(this object source) {
var mapper = ServiceProvider.GetRequiredService<IMapper>();
return mapper.Map<TDestination>(source);
}
public static List<TDestination> MapToList<TDestination>(this IEnumerable source) {
var mapper = ServiceProvider.GetRequiredService<IMapper>();
return mapper.Map<List<TDestination>>(source);
}
public static List<TDestination> MapToList<TSource, TDestination>(this IEnumerable<TSource> source) {
var mapper = ServiceProvider.GetRequiredService<IMapper>();
return mapper.Map<List<TDestination>>(source);
}
}
}
然後在Startup檔案中Configure方法裡註冊下
//AutoMapperHelper擴充套件方法註冊
app.UseStateAutoMapper();
這樣呼叫方法就可以改成,直接實現了一個擴充套件方法
var dto = q.MapTo<sys_userDto>();
相對來說更簡潔點了
注意,這裡重點是要明白IServiceProvider介面,IServiceProvider可以根據IApplicationBuilder來提供,在Startup檔案中的Configure方法會注入IApplicationBuilder,那麼我們自定義的AutoMapperHelper擴充套件方法就可以對IApplicationBuilder擴充套件來獲得IServiceProvider,
IServiceProvider說明
在ASP.NET Core的容器中,系統提供了IServiceCollection來註冊服務和提供了IServiceProvider這個讓我們解析各種註冊過的服務,提供GetService()和GetRequiredService()兩個方法來解析服務。可以參考下一下文章瞭解下這個知識點
ASP.NET Core中GetService()和GetRequiredService()之間的區別
那麼我們就可以通過IServiceProvider來解析IMapper,從而來實現對映處理。
相關文章
- ASP.NET Core擴充套件庫之Http通用擴充套件ASP.NET套件HTTP
- HIVE自定義函式的擴充套件Hive函式套件
- .Net core Worker Service 擴充套件庫套件
- [原]JUnit 自定義擴充套件思路套件
- 擴充套件WCF自定義行為(二)套件
- C#.NET擴充套件方法C#套件
- django實現自定義manage命令的擴充套件Django套件
- EFCore3.1+編寫自定義的EF.Functions擴充套件方法Function套件
- ASP.NET Core擴充套件庫之日誌ASP.NET套件
- JMeter 擴充套件開發:自定義 Java SamplerJMeter套件Java
- JMeter擴充套件開發:自定義函式JMeter套件函式
- jquery 擴充套件方法($.fn.extend/$.extend) 自定義外掛 拖拽jQuery套件
- 在EF Core 中使用AsQueryable擴充套件方法的拼接查詢套件
- Android自定義字型--自定義TextView(可擴充套件不同ttf字Android自定義字型TextView套件
- AbpVnext使用分散式IDistributedCache Redis快取(自定義擴充套件方法)分散式Redis快取套件
- .net Core 使用AutoMapperAPP
- 自定義擴充套件jQuery功能簡單介紹套件jQuery
- 基於shiro的自定義註解的擴充套件套件
- [外掛擴充套件]onethink自定義分類標籤-關聯模型套件模型
- .NET Core中介軟體的註冊和管道的構建(3) ---- 使用Map/MapWhen擴充套件方法套件
- Swift 小貼士:語言的擴充套件和自定義Swift套件
- .Net3.5新特性-擴充套件方法套件
- Flutter——Dart Extension擴充套件方法的使用FlutterDart套件
- .net core中使用AutomapperAPP
- 程式碼演示Mybatis-Generator 擴充套件自定義生成MyBatis套件
- tep0.9.5支援自定義擴充套件request套件
- .NET: 談談C#中的擴充套件方法C#套件
- C#|.net core 基礎 - 擴充套件陣列新增刪除效能最好的方法C#套件陣列
- tonyenc加密擴充套件使用方法加密套件
- JMeter 擴充套件開發:自定義 JMeter 外掛的除錯JMeter套件除錯
- 實戰 | 執行緒池的幾種自定義擴充套件執行緒套件
- ASP.NET Core擴充套件庫之實體對映ASP.NET套件
- 使用 .NET Core 構建可擴充套件的實時資料處理系統套件
- day88-ElasticSearch-分詞- 自定義擴充套件詞庫Elasticsearch分詞套件
- DcatAdmin 擴充套件: 自定義表單(動態表單)套件
- node-exporter 擴充套件用法 – shell 自定義 exporter 監控Export套件
- JMeter 擴充套件外掛實現對自定義協議的支援JMeter套件協議
- .NET Core 中AutoMapper的配置及使用APP