• 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; 来改变初始文件夹。

  • 相关阅读:
    jQuery Timer 实现的新邮件提醒
    在 jquery repeater 中添加设置日期,下拉,复选框等控件
    jquery repeater 完成 QQ 邮箱邮件分组显示功能
    Ajax 与 WebService 之间日期等数据类型的转换
    通过 Parameter 对象添加 Ajax 请求时的参数
    在 jQuery Repeater 进行验证更新等操作时提示消息
    jquery repeater 模仿 Google 展开页面预览子视图
    在 jQuery Repeater 中检索过滤数据
    功能完善的 jquery validator 完成用户注册的验证
    在 Repeater 中绑定转化 JSON 格式的字段
  • 原文地址:https://www.cnblogs.com/baiyunchen/p/3943942.html
Copyright © 2020-2023  润新知