亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

集成和配置AutoMapper

系統(tǒng) 2082 0

?

AutoMapper的基本使用請(qǐng)參考 : http://www.cnblogs.com/ljzforever/archive/2011/12/29/2305500.html

?

學(xué)習(xí)一下Nop是如何配置和集成AutoMapper的。

?

IStartupTask.cs

      
        namespace
      
      
         Nop.Core.Infrastructure

{

    
      
      
        public
      
      
        interface
      
      
         IStartupTask 

    {

        
      
      
        void
      
      
         Execute();



        
      
      
        int
      
       Order { 
      
        get
      
      
        ; }

    }

}
      
    

?

之前的隨便介紹了 ITypeFinder實(shí)現(xiàn) , 項(xiàng)目啟動(dòng)時(shí),ITypeFinder會(huì)找到項(xiàng)目中所有繼承 IStartupTask 接口的實(shí)現(xiàn)。其中就有AutoMapperStartupTask

      
        using
      
      
         AutoMapper;


      
      
        using
      
      
         Nop.Admin.Models.Blogs;


      
      
        using
      
      
         Nop.Admin.Models.Catalog;


      
      
        using
      
      
         Nop.Admin.Models.Cms;


      
      
        using
      
      
         Nop.Admin.Models.Common;


      
      
        using
      
      
         Nop.Admin.Models.Customers;


      
      
        using
      
      
         Nop.Admin.Models.Directory;


      
      
        using
      
      
         Nop.Admin.Models.Discounts;


      
      
        using
      
      
         Nop.Admin.Models.ExternalAuthentication;


      
      
        using
      
      
         Nop.Admin.Models.Forums;


      
      
        using
      
      
         Nop.Admin.Models.Localization;


      
      
        using
      
      
         Nop.Admin.Models.Logging;


      
      
        using
      
      
         Nop.Admin.Models.Messages;


      
      
        using
      
      
         Nop.Admin.Models.News;


      
      
        using
      
      
         Nop.Admin.Models.Orders;


      
      
        using
      
      
         Nop.Admin.Models.Payments;


      
      
        using
      
      
         Nop.Admin.Models.Plugins;


      
      
        using
      
      
         Nop.Admin.Models.Polls;


      
      
        using
      
      
         Nop.Admin.Models.Settings;


      
      
        using
      
      
         Nop.Admin.Models.Shipping;


      
      
        using
      
      
         Nop.Admin.Models.Tax;


      
      
        using
      
      
         Nop.Admin.Models.Topics;


      
      
        using
      
      
         Nop.Core.Domain.Blogs;


      
      
        using
      
      
         Nop.Core.Domain.Catalog;


      
      
        using
      
      
         Nop.Core.Domain.Common;


      
      
        using
      
      
         Nop.Core.Domain.Customers;


      
      
        using
      
      
         Nop.Core.Domain.Directory;


      
      
        using
      
      
         Nop.Core.Domain.Discounts;


      
      
        using
      
      
         Nop.Core.Domain.Forums;


      
      
        using
      
      
         Nop.Core.Domain.Localization;


      
      
        using
      
      
         Nop.Core.Domain.Logging;


      
      
        using
      
      
         Nop.Core.Domain.Media;


      
      
        using
      
      
         Nop.Core.Domain.Messages;


      
      
        using
      
      
         Nop.Core.Domain.News;


      
      
        using
      
      
         Nop.Core.Domain.Orders;


      
      
        using
      
      
         Nop.Core.Domain.Polls;


      
      
        using
      
      
         Nop.Core.Domain.Shipping;


      
      
        using
      
      
         Nop.Core.Domain.Tax;


      
      
        using
      
      
         Nop.Core.Domain.Topics;


      
      
        using
      
      
         Nop.Core.Infrastructure;


      
      
        using
      
      
         Nop.Core.Plugins;


      
      
        using
      
      
         Nop.Services.Authentication.External;


      
      
        using
      
      
         Nop.Services.Cms;


      
      
        using
      
      
         Nop.Services.Messages;


      
      
        using
      
      
         Nop.Services.Payments;


      
      
        using
      
      
         Nop.Services.Shipping;


      
      
        using
      
      
         Nop.Services.Tax;




      
      
        namespace
      
      
         Nop.Admin.Infrastructure

{

    
      
      
        public
      
      
        class
      
      
         AutoMapperStartupTask : IStartupTask

    {

        
      
      
        public
      
      
        void
      
      
         Execute()

        {

            
      
      
        //
      
      
        TODO remove 'CreatedOnUtc' ignore mappings because now presentation layer models have 'CreatedOn' property and core entities have 'CreatedOnUtc' property (distinct names)

            

            
      
      
        //
      
      
        address
      
      

            Mapper.CreateMap<Address, AddressModel>
      
        ()

                .ForMember(dest 
      
      => dest.AddressHtml, mo =>
      
         mo.Ignore())

                .ForMember(dest 
      
      => dest.AvailableCountries, mo =>
      
         mo.Ignore())

                .ForMember(dest 
      
      => dest.AvailableStates, mo =>
      
         mo.Ignore())

                .ForMember(dest 
      
      => dest.FirstNameDisabled, mo =>
      
         mo.Ignore())

                .ForMember(dest 
      
      => dest.LastNameDisabled, mo =>
      
         mo.Ignore())

                .ForMember(dest 
      
      => dest.EmailDisabled, mo =>
      
         mo.Ignore())

                .ForMember(dest 
      
      => dest.CompanyDisabled, mo =>
      
         mo.Ignore())

                .ForMember(dest 
      
      => dest.CountryDisabled, mo =>
      
         mo.Ignore())

                .ForMember(dest 
      
      => dest.StateProvinceDisabled, mo =>
      
         mo.Ignore())

                .ForMember(dest 
      
      => dest.CityDisabled, mo =>
      
         mo.Ignore())

                .ForMember(dest 
      
      => dest.Address1Disabled, mo =>
      
         mo.Ignore())

                .ForMember(dest 
      
      => dest.Address2Disabled, mo =>
      
         mo.Ignore())

                .ForMember(dest 
      
      => dest.ZipPostalCodeDisabled, mo =>
      
         mo.Ignore())

                .ForMember(dest 
      
      => dest.PhoneNumberDisabled, mo =>
      
         mo.Ignore())

                .ForMember(dest 
      
      => dest.FaxNumberDisabled, mo =>
      
         mo.Ignore());

            Mapper.CreateMap
      
      <AddressModel, Address>
      
        ()

                .ForMember(dest 
      
      => dest.CreatedOnUtc, mo =>
      
         mo.Ignore())

                .ForMember(dest 
      
      => dest.Country, mo =>
      
         mo.Ignore())

                .ForMember(dest 
      
      => dest.StateProvince, mo =>
      
         mo.Ignore());


      
    
        
                      ……

}
        
      

?

然后是單元測(cè)試,AutoMapperStartupTask 提交后進(jìn)行集成測(cè)試,驗(yàn)證配置是否正確。

      
        [TestFixture]

    
      
      
        public
      
      
        class
      
      
         AutoMapperConfigurationTest

    {

        [Test]

        
      
      
        public
      
      
        void
      
      
         Configuration_is_valid()

        {

            
      
      
        var
      
       autoMapperStartupTask = 
      
        new
      
      
         AutoMapperStartupTask();

            autoMapperStartupTask.Execute();

            Mapper.AssertConfigurationIsValid();

        }

    }
      
    

?

這里一個(gè)專門用于Mapper的擴(kuò)展方法。

      
        public
      
      
        static
      
      
        class
      
      
         MappingExtensions

    {

        
      
      
        #region
      
       Category



        
      
        public
      
      
        static
      
       CategoryModel ToModel(
      
        this
      
      
         Category entity)

        {

            
      
      
        return
      
       Mapper.Map<Category, CategoryModel>
      
        (entity);

        }



        
      
      
        public
      
      
        static
      
       Category ToEntity(
      
        this
      
      
         CategoryModel model)

        {

            
      
      
        return
      
       Mapper.Map<CategoryModel, Category>
      
        (model);

        }



        
      
      
        public
      
      
        static
      
       Category ToEntity(
      
        this
      
      
         CategoryModel model, Category destination)

        {

            
      
      
        return
      
      
         Mapper.Map(model, destination);

        }

。。。
      
    

?

最后是調(diào)用完成ViewModel,Entity的轉(zhuǎn)換

      
        var
      
       gridModel = 
      
        new
      
       GridModel<CategoryModel>
      
        

            {

                Data 
      
      = categories.Select(x =>
      
        

                {

                    
      
      
        var
      
       categoryModel =
      
         x.ToModel();

                    categoryModel.Breadcrumb 
      
      =
      
         x.GetCategoryBreadCrumb(_categoryService);

                    
      
      
        return
      
      
         categoryModel;

                }),

                Total 
      
      =
      
         categories.TotalCount

            };

            
      
      
        return
      
      
        new
      
      
         JsonResult

            {

                Data 
      
      =
      
         gridModel

            };
      
    

?

總結(jié): 光學(xué)會(huì)如何使用一個(gè)工具還不行,還要學(xué)習(xí)它如何能和自己的項(xiàng)目進(jìn)行良好的集成。。使用不當(dāng)?shù)脑挿炊绊懖寮晚?xiàng)目的擴(kuò)展性,增加項(xiàng)目的復(fù)雜度。Nop的模塊劃分很清晰,方便了今后學(xué)習(xí)和改造。

?

參考:

http://www.cnblogs.com/ljzforever/archive/2011/12/29/2305500.html

集成和配置AutoMapper


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 男人的天堂欧美精品色偷偷 | 国产成人精品午夜在线播放 | 久久欧美精品欧美九久欧美 | 亚洲国产精品久久日 | 第一序列番外篇在哪里看 | 亚洲精品伊人久久久久 | 久久午夜神器 | 在线观看久草 | 欧美大尺度免费一级特黄 | 日本欧美一二三区色视频 | 亚洲欧美人成人综合在线50p | 久久免费看片 | 国产伦一区二区三区四区久久 | 奇米第四色视频 | 日本精品欧洲www | 成人久久18免费游戏网站 | 久久99影院 | 久久99精品热在线观看15 | 国产精品一级香蕉一区 | 国产一区二区精品久 | 一区二区三区在线播放视频 | 成人日b视频| 欧美干干| 一本色道久久爱88av俺来也 | 性欧美欧美之巨大69 | 欧美精品在线一区二区三区 | 日日干夜夜操s8 | 日韩 国产 在线 | 日韩影院久久 | 免费久久精品国产片香蕉 | 麻豆成人久久精品二区三区小说 | 国产福利一区二区三区在线视频 | 亚洲成 人a影院青久在线观看 | 久久国产精彩视频 | 蜜桃精品免费久久久久影院 | 99er视频| 久久综合九色综合网站 | 六月丁香婷婷激情国产 | 四虎国产精品影库永久免费 | 国产天天在线 | 一级毛片美国一级j毛片不卡 |