當前位置:
首頁 > 知識 > AutoMapper 6.x 擴展

AutoMapper 6.x 擴展

簡介

很多時候我們使用AutoMapper的時候,都需要進行一個配置才可以使用Mapper.Map(entity);。如果不進行配置則會報錯。

如果實體過多,有時候會忘記是否有配置,只有運行的時候才會發現這個BUG。

源代碼地址
  • 源碼地址
  • 測試案例地址

源代碼

該擴展基於AutoMapper 6.x版本,因此需要從Nuget下載相應的包。

該擴展對於Object以及List進行了兼容支持,因此MapTo可以直接映射實體與泛型列表。

///

/// AutoMapper擴展
///

public static class Extensions
{
///

/// 將源對象映射到目標對象
///

/// 源類型
/// 目標類型
/// 源對象 /// 目標對象 ///
public static TDestination MapTo(this TSource source, TDestination destination)
{
return MapTo(source, destination);
}

///

/// 將源對象映射到目標對象
///

/// 源類型
/// 目標類型
/// 源對象 ///
public static TDestination MapTo(this TSource source) where TDestination : new
{
return MapTo(source, new TDestination);
}

///

/// 將源對象映射到目標對象
///

/// 目標類型
/// 源對象 /// 目標對象 ///
private static TDestination MapTo(object source, TDestination destination)
{
if (source == null)
{
throw new ArgumentNullException(nameof(source));
}
if (destination == null)
{
throw new ArgumentNullException(nameof(destination));
}
var sourceType = GetObjectType(source.GetType);
var destinationType = GetObjectType(typeof(TDestination));
try
{
var map = Mapper.Configuration.FindTypeMapFor(sourceType,destinationType);
if (map != null)
{
return Mapper.Map(source, destination);
}
var maps = Mapper.Configuration.GetAllTypeMaps;
Mapper.Initialize(config =>
{
foreach (var item in maps)
{
config.CreateMap(item.SourceType, item.DestinationType);
}
config.CreateMap(sourceType,destinationType);
});

}
catch (InvalidOperationException)
{
Mapper.Initialize(config =>
{
config.CreateMap(sourceType, destinationType);
});
}
return Mapper.Map(source, destination);
}

///

/// 獲取對象類型
///

/// 類型 ///
private static Type GetObjectType(Type source)
{
if (source.IsGenericType && typeof(IEnumerable).IsAssignableFrom(source))
{
var type = source.GetGenericArguments[0];
return GetObjectType(type);
}
return source;
}
}

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

JVM總結之命令行工具
python自定義異常
通過history解決ajax不支持前進/後退/刷新
ASP.NET Core Web API 最小化項目
spark源碼分析之SparkContext初始化一

TAG:達人科技 |