91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用對象到對象映射AutoMapper

發布時間:2021-10-18 17:11:13 來源:億速云 閱讀:151 作者:iii 欄目:web開發

本篇內容主要講解“如何使用對象到對象映射AutoMapper”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何使用對象到對象映射AutoMapper”吧!

入門

AutoMapper支持使用靜態服務位置構造“自定義值解析器”,“自定義類型轉換器”和“值轉換器”的功能:

var configuration = new MapperConfiguration(cfg => {     cfg.ConstructServicesUsing(ObjectFactory.GetInstance);      cfg.CreateMap<Source, Destination>(); });

或動態服務位置,用于基于實例的容器(包括子容器/嵌套容器):

var mapper = new Mapper(configuration, childContainer.GetInstance);  var dest = mapper.Map<Source, Destination>(new Source { Value = 15 });

您可以使用配置文件定義配置。然后,通過在啟動時調用IServiceCollection擴展方法AddAutoMapper,使AutoMapper知道這些概要文件在哪些程序集中定義:

services.AddAutoMapper(profileAssembly1, profileAssembly2 /*, ...*/);

或標記類型:

services.AddAutoMapper(typeof(ProfileTypeFromAssembly1), typeof(ProfileTypeFromAssembly2) /*, ...*/);

現在,您可以在運行時將AutoMapper注入服務/控制器中:

public class EmployeesController {   private readonly IMapper _mapper;    public EmployeesController(IMapper mapper) => _mapper = mapper;    // use _mapper.Map or _mapper.ProjectTo }

當然還有很多可擴展性,比如:

定制類型轉換器

有時,您需要完全控制從一種類型到另一種類型的轉換。通常,這是當一種類型看起來與另一種類型不一樣時,已經存在轉換函數,并且您希望從“松散”類型變為更強的類型,例如字符串的源類型到Int32的目標類型。

例如,假設我們的源類型為:

public class Source {   public string Value1 { get; set; }   public string Value2 { get; set; }   public string Value3 { get; set; } }

但您想將其映射到:

public class Destination {   public int Value1 { get; set; }   public DateTime Value2 { get; set; }   public Type Value3 { get; set; } }

如果我們嘗試按原樣映射這兩種類型,則AutoMapper會拋出異常(在映射時和配置檢查時),因為AutoMapper不知道從字符串到int,DateTime或Type的任何映射。要為這些類型創建映射,我們必須提供一個自定義類型轉換器,并且我們可以通過三種方式:

void ConvertUsing(Func<TSource, TDestination> mappingFunction); void ConvertUsing(ITypeConverter<TSource, TDestination> converter); void ConvertUsing<TTypeConverter>() where TTypeConverter : ITypeConverter<TSource, TDestination>;

第一個選項就是任何帶有源并返回目的地的函數(也有多個重載)。這適用于簡單的情況,但對于較大的情況則顯得笨拙。在更困難的情況下,我們可以創建一個自定義的ITypeConverter

public interface ITypeConverter<in TSource, TDestination> {   TDestination Convert(TSource source, TDestination destination, ResolutionContext context); }

并向AutoMapper提供一個自定義類型轉換器的實例,或者為類型提供AutoMapper將在運行時實例化的類型。我們上面的源/目標類型的映射配置將變為:

public void Example() {     var configuration = new MapperConfiguration(cfg => {       cfg.CreateMap<string, int>().ConvertUsing(s => Convert.ToInt32(s));       cfg.CreateMap<string, DateTime>().ConvertUsing(new DateTimeTypeConverter());       cfg.CreateMap<string, Type>().ConvertUsing<TypeTypeConverter>();       cfg.CreateMap<Source, Destination>();     });     configuration.AssertConfigurationIsValid();      var source = new Source     {         Value1 = "5",         Value2 = "01/01/2000",         Value3 = "AutoMapperSamples.GlobalTypeConverters.GlobalTypeConverters+Destination"     };      Destination result = mapper.Map<Source, Destination>(source);     result.Value3.ShouldEqual(typeof(Destination)); }  public class DateTimeTypeConverter : ITypeConverter<string, DateTime> {     public DateTime Convert(string source, DateTime destination, ResolutionContext context)     {         return System.Convert.ToDateTime(source);     } }  public class TypeTypeConverter : ITypeConverter<string, Type> {     public Type Convert(string source, Type destination, ResolutionContext context)     {           return Assembly.GetExecutingAssembly().GetType(source);     } }

在第一個映射中,從字符串到Int32,我們僅使用內置的Convert.ToInt32函數(作為方法組提供)。接下來的兩個使用自定義ITypeConverter實現。

自定義類型轉換器的真正強大之處在于,只要AutoMapper在任何映射類型上找到源/目標對,它們就可以使用。我們可以構建一組自定義類型轉換器,并在其上使用其他映射配置,而無需任何其他配置。在上面的示例中,我們不必再次指定string  / int轉換。由于必須在類型成員級別配置自定義值解析器,因此自定義類型轉換器的作用域是全局的。

當然還有很多功能需要去實際項目中實現。

到此,相信大家對“如何使用對象到對象映射AutoMapper”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

上栗县| 邵阳市| 齐齐哈尔市| 宜良县| 南开区| 尚志市| 鹤庆县| 武义县| 花莲县| 贵港市| 河北区| 宁都县| 柏乡县| 江陵县| 伊宁市| 浦东新区| 湘潭县| 离岛区| 庆安县| 茌平县| 花垣县| 汽车| 论坛| 六安市| 泰兴市| 莱阳市| 萍乡市| 厦门市| 新建县| 昆山市| 任丘市| 新竹市| 江安县| 临安市| 开鲁县| 略阳县| 谷城县| 黑山县| 尚志市| 织金县| 扎赉特旗|