19.AutoMapper 之開放式泛型(Open Generics)

 

開放式泛型(Open Generics)

AutoMapper能夠支持開放式泛型的映射。爲開放式泛型建立映射:javascript

public class Source<T> { public T Value { get; set; } } public class Destination<T> { public T Value { get; set; } } // 建立映射 Mapper.Initialize(cfg => cfg.CreateMap(typeof(Source<>), typeof(Destination<>))); 

你不須要爲封閉式泛型類型建立映射。AutoMapper在運行時將應用開放式泛型映射的配置到封閉式泛型映射中:java

var source = new Source<int> { Value = 10 }; var dest = mapper.Map<Source<int>, Destination<int>>(source); dest.Value.ShouldEqual(10); 

由於C#只容許封閉式泛型類型參數,因此必須使用System.Type版本的CreateMap建立你的開放式泛型映射。你能夠使用全部可用的映射配置,而且開放式泛型配置將在運行時應用於封閉類型映射。AutoMapper在配置驗證期間將跳過開放式泛型映射,由於以後仍然能夠建立不轉換的閉合類型,例如Source <Foo> - > Destination <Bar>,其中沒有從Foo到Bar的轉換。app

你也能夠建立一個開放式泛型的轉換器:ui

Mapper.Initialize(cfg => cfg.CreateMap(typeof(Source<>), typeof(Destination<>)).ConvertUsing(typeof(Converter<>))); 

AutoMapper還支持具備任意數量泛型參數的開放式泛型類型轉換器:spa

Mapper.Initialize(cfg => cfg.CreateMap(typeof(Source<>), typeof(Destination<>)).ConvertUsing(typeof(Converter<,>))); 

來自Source的閉合類型將是第一個泛型參數,而'Destination的閉合類型將是Converter <,>`的第二個參數。code

碼字不易,動動手指給個贊吧ip

相關文章
相關標籤/搜索