AutoMapper配置方法

來源:互聯網
上載者:User

標籤:blog   http   使用   io   ar   for   檔案   art   div   

在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配置方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.