使用AutoMapper,可以直接先写一个公用方法

        /// <summary>
        /// 对象到对象转换
        /// </summary>
        /// <typeparam name="T">待转换类型</typeparam>
        /// <param name="source">源类型</param>
        /// <returns>转换结果</returns>
        public static T MapTo<T>(this object source)
        {
            if (source == null)
            {
                return default(T);
            }

             Mapper.Initialize(cfg => cfg.CreateMap(source.GetType(), typeof(T)));


            return Mapper.Map<T>(source);
        }

这种情况下,第一次运行正常,但是之后会出现以下异常:

AutoMapper重复初始化异常

 

因此我们需要判断对应的对象转换是否已经存在:如下图所示:

        /// <summary>
        /// 验证对象到对象是否存在
        /// </summary>
        /// <param name="srcType"></param>
        /// <param name="destType"></param>
        /// <returns></returns>
        private static bool ConfigExist(Type srcType, Type destType)
        {
            return Mapper.Configuration.FindMapper(new TypePair(srcType, destType)) ==null;
        }

 

然而又出现以下异常:

AutoMapper重复初始化异常

 

也就是说,如果我们要验证是否存在必须初始化,在这里就出现一个死循环--“初始化前必须验证是否存在,然而验证是否存在必须初始化”。

因为上面这个问题,使我纠结了很久,最终才找到以下解决方案:

      在项目Global.asax文件中Application_Start里面添加AutoMapper的空初始化,这样就可以解决以上问题:

 Mapper.Initialize(ctx => { });

 

相关文章: