首页 > 代码库 > AutoMapper配置方法

AutoMapper配置方法

在Mvc开发中,我们经常需要构建一个viewModel出来供页面使用,在PO和VO之间相互传值的时候,如果实体字段比较多的时候,那么传值将变得异常麻烦,也使得代码非常的臃肿。AutoMapper可以帮我们自动的映射两个实体,而且我们还可以自定义一些映射规则,真的是非常的方便。研究了一晚上,找了各种资料,终于把AutoMapper配置出来了,其实配置也没有那么难,只是我尝试映射的时候想映射一个PageList<T>对象,结果尝试了好长时间,才发现,是PageList<T>貌似不能简单的映射,具体怎么映射我没研究出来,如果谁有好的映射PageList的办法,欢迎与我分享啊,感激不尽。

下面是参考网上的资料写的映射配置,这种配置方法只需要在应用程序启动的时候执行一次,非常的方便。

定义一个接口 IStartupTask

 public interface IStartupTask    {        void Execute();    }

  golbal.asax中定义如下一个方法:

private void ExecuteStartupTasks()        {            List<IStartupTask> startupTasks = new List<IStartupTask>();            Assembly asm;            // get path of executing (bin) folder from the current executing assembly            string codeBase = HttpRuntime.BinDirectory;            UriBuilder uri = new UriBuilder(codeBase);            string path = Uri.UnescapeDataString(uri.Path);            string bin = Path.GetDirectoryName(path);            string[] assemblies = Directory.GetFiles(bin, "*.dll");            foreach (String file in assemblies)            {                try                {                    if (File.Exists(file))                    {                        asm = Assembly.LoadFrom(file);                        var query = from t in asm.GetTypes()                                    where t.IsClass && t.GetInterface(typeof(IStartupTask).FullName) != null                                    select t;                        // add types to list of startup tasks                        foreach (Type type in query)                        {                            startupTasks.Add((IStartupTask)Activator.CreateInstance(type));                        }                    }                }                catch (Exception ex)                {                    throw  new Exception(ex.Message);                }            }            foreach (IStartupTask task in startupTasks)            {                task.Execute();            }        }

  然后在Application_Start中执行这个方法:

 protected void Application_Start()        {            ExecuteStartupTasks();        }

  在Model文件夹增加一个映射类文件,实现 IStartupTask接口

 public class ModelMapping:IStartupTask    {        public void Execute()        {                      Create<AdminUserListModel,user>();        }        protected virtual void Create<T1, T2>()        {            Mapper.CreateMap<T1, T2>();            Mapper.CreateMap<T2, T1>();        }      }

  这种配置方法的大概意思是,在程序启动的时候,利用反射在Bin目录下挨个儿找所有的dll文件,接着在dll中找所有实现了IStartupTask接口的类,然后给初始化,即执行AutoMapper所需要初始化的一些步骤,具体我没细研究。如果你需要映射的类的dll不在网站的bin目录下,你可以通过设置  string codeBase = HttpRuntime.BinDirectory; 来改变初始文件夹。

AutoMapper配置方法