AutoMapper 6.x 扩展

发布时间:2017-7-9 7:04:24编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"AutoMapper 6.x 扩展 ",主要涉及到AutoMapper 6.x 扩展 方面的内容,对于AutoMapper 6.x 扩展 感兴趣的同学可以参考一下。

源代码

该扩展基于AutoMapper 6.x版本,因此需要从Nuget下载相应的包。
该扩展对于Object以及List<T>进行了兼容支持,因此MapTo<TSource,TDestination>()可以直接映射实体与泛型列表。

/// <summary>/// AutoMapper扩展/// </summary>public static class Extensions{    /// <summary>    /// 将源对象映射到目标对象    /// </summary>    /// <typeparam name="TSource">源类型</typeparam>    /// <typeparam name="TDestination">目标类型</typeparam>    /// <param name="source">源对象</param>    /// <param name="destination">目标对象</param>    /// <returns></returns>    public static TDestination MapTo<TSource, TDestination>(this TSource source, TDestination destination)    {        return MapTo<TDestination>(source, destination);    }    /// <summary>    /// 将源对象映射到目标对象    /// </summary>    /// <typeparam name="TSource">源类型</typeparam>    /// <typeparam name="TDestination">目标类型</typeparam>    /// <param name="source">源对象</param>    /// <returns></returns>    public static TDestination MapTo<TSource, TDestination>(this TSource source) where TDestination : new()    {        return MapTo(source, new TDestination());    }    /// <summary>    /// 将源对象映射到目标对象    /// </summary>    /// <typeparam name="TDestination">目标类型</typeparam>    /// <param name="source">源对象</param>    /// <param name="destination">目标对象</param>    /// <returns></returns>    private static TDestination MapTo<TDestination>(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);    }    /// <summary>    /// 获取对象类型    /// </summary>    /// <param name="source">类型</param>    /// <returns></returns>    private static Type GetObjectType(Type source)    {        if (source.IsGenericType && typeof(IEnumerable).IsAssignableFrom(source))        {            var type = source.GetGenericArguments()[0];            return GetObjectType(type);        }


上一篇:AssemblyVersion,AssemblyFileVersion解释以及获取
下一篇:访问GitLab的PostgreSQL数据库-(3)

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款