欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

集成和配置AutoMapper

系統 1862 0

?

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

?

學習一下Nop是如何配置和集成AutoMapper的。

?

IStartupTask.cs

      
        namespace
      
      
         Nop.Core.Infrastructure

{

    
      
      
        public
      
      
        interface
      
      
         IStartupTask 

    {

        
      
      
        void
      
      
         Execute();



        
      
      
        int
      
       Order { 
      
        get
      
      
        ; }

    }

}
      
    

?

之前的隨便介紹了 ITypeFinder實現 , 項目啟動時,ITypeFinder會找到項目中所有繼承 IStartupTask 接口的實現。其中就有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());


      
    
        
                      ……

}
        
      

?

然后是單元測試,AutoMapperStartupTask 提交后進行集成測試,驗證配置是否正確。

      
        [TestFixture]

    
      
      
        public
      
      
        class
      
      
         AutoMapperConfigurationTest

    {

        [Test]

        
      
      
        public
      
      
        void
      
      
         Configuration_is_valid()

        {

            
      
      
        var
      
       autoMapperStartupTask = 
      
        new
      
      
         AutoMapperStartupTask();

            autoMapperStartupTask.Execute();

            Mapper.AssertConfigurationIsValid();

        }

    }
      
    

?

這里一個專門用于Mapper的擴展方法。

      
        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);

        }

。。。
      
    

?

最后是調用完成ViewModel,Entity的轉換

      
        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

            };
      
    

?

總結: 光學會如何使用一個工具還不行,還要學習它如何能和自己的項目進行良好的集成。。使用不當的話反而影響插件和項目的擴展性,增加項目的復雜度。Nop的模塊劃分很清晰,方便了今后學習和改造。

?

參考:

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

集成和配置AutoMapper


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产区小视频 | 精品国精品国产自在久国产应用 | 香蕉久久久 | 精品国产一区二区国模嫣然 | 日韩在线免费看网站 | 三级黄色免费观看 | 国产高清卡一卡新区 | 午夜亚洲精品 | 婷婷色香五月激情综合2020 | 日本久久精品 | 成人午夜免费剧场 | 四虎影视永久免费观看网址 | 精品欧美一区视频在线观看 | 亚洲欧洲一区二区三区 | 欧美三级美国一级 | 亚洲涩涩 | 日本不卡在线一区二区三区视频 | 日本福利视频 | 亚洲一区二区在线播放 | 国产精品久久久精品 | 国产成人综合AV在线观看不止 | 欧美国产成人一区二区三区 | 国产精品久久久久久久久久 | 天天摸天天爽视频69视频 | 欧美成人做性视频在线播放 | 一级毛片在线免费观看 | 亚洲AV国产成人精品区三上 | 国产xxxx搡xxxxx搡麻豆 | 亚洲免费色| 熟女毛片| 99爱在线视频这里只有精品 | 色综合久久精品中文字幕首页 | 亚洲一区二区免费看 | 在线中文字幕视频 | 国产91成人精品亚洲精品 | 999精品嫩草久久久久久99 | 成人在线免费观看网站 | 精品国产三级 | 亚洲精品在线播放 | 色综合久久88色综合天天 | 欧美三级短视频 |