一歩一歩ASPを作成する.NET MVC 5プログラム[Repository+Autofac+Automapper+SqlSugar](5)


前言


Hiさん、こんにちは、レコードです.
時間は過ぎ去って、1週間はまた過ぎて、今日はまだ金曜日で、Rectorはコード友網で引き続きみんなとシリーズのテキストを分かち合います:一歩一歩ASPを作成しますNET MVC 5プログラム[Repository+Autofac+Automapper+SqlSugar]
下一篇《一歩一歩ASP.NET MVC 5プログラムを作成する[Repository+Autofac+Automapper+SqlSugar](四)》を完成しました.
  • サービス層:TsBlogを作成する.Services
  • サービスインタフェース
  • を作成する.
  • は、サービスインタフェース
  • を実装する.
  • 倉庫インタフェース
  • を作成する.
  • Autofac依存注入アセンブリ
  • をインストールする
  • 登録構成Autofac依存注入
  • その中で、最も主要なのはプロジェクトに依存注入コンポーネントを導入することです:Autofacと構成と簡単な使用.このチュートリアルに進みます.

    本文の知識の要点

  • AutoMapperの概要
  • AutoMapper
  • をインストール
  • AutoMapperの構成
  • AutoMapperのアプリケーション
  • AutoMapperの概要


    AutoMapperとは?簡単に言えば、AutoMapperは.NET(C#)言語で開発された1つのエンティティオブジェクトから別のエンティティオブジェクトへのマッピング関係を軽く処理するコンポーネントライブラリ.開発者が必要とすることは、AutoMapperによって2つのエンティティオブジェクト間のマッピング関係を構成することです.
    AutoMapperを使用する理由マッピングコードは退屈です.マッピングコードをテストするのはもっと退屈です.AutoMapperでは、簡単な構成と簡単なマッピングテストが用意されています.本当の問題は、「オブジェクト-オブジェクトのマッピングを使用する理由」かもしれません.マッピングは、1つのアプリケーションの多くの場所で発生する可能性がありますが、多くの場合、UI/Domainレイヤ間、またはServices/Domainレイヤ間などのレイヤとレイヤ間の境界で発生します.注目レイヤは通常、注目レイヤと競合するため、オブジェクト-オブジェクト間のマッピングはモデルモデルモデルを分離し、各レイヤの注目タイプにのみ影響します.

    AutoMapperのインストール


    AutoMapperのインストールは簡単です.Nugetコマンドを使用できます.
    PM> Install-Package AutoMapper

    対応するプロジェクトに直接インストールされますが、このシリーズのプロジェクトでは、AutoMapperのソリッドオブジェクトマッピングを構成するために、AutoMapperに関するプロジェクトを作成します.したがって、TsBlogソリューションを開き、ソリューションディレクトリ【1.Libraries】を右クリックして、新しいソリューションを追加する.Net Frameworkプロジェクトは、次の図に示されています.
    作成した[TsBlog.AutoMapperConfig]を選択し、パッケージ管理コンソールを開き、[1.LibrariesTsBlog.AutoMapperConfig]のデフォルトアイテムを選択して、次のようにNugetパッケージインストールコマンドを入力します.
    Enter(リターンカー)でインストールします.本稿を書くときのAutoMapperバージョンはAutoMapperです.6.2.2.

    AutoMapperの構成


    ソリューションのディレクトリ構造をより明確にするために、ここではビューエンティティを別のプロジェクトに配置しました.したがって、ソリューションディレクトリ[1.Libraries]の下に、ビューエンティティに関するクラスファイルのみを格納する[TsBlog.View Model]というプロジェクトを作成します.本稿のプレゼンテーションのためにTsBlog.ViewModelプロジェクトでPostフォルダを作成し、PostViewModelを作成します.csのビュークラス.ソリューションディレクトリは次のとおりです.
    PostViewModel.cs :
    namespace TsBlog.ViewModel.Post
    {
        /// 
        ///        
        /// 
        public class PostViewModel
        {
            /// 
            /// ID
            /// 
            public int Id { get; set; }
            /// 
            ///   
            /// 
            public string Title { get; set; }
            /// 
            ///   
            /// 
            public string Content { get; set; }
            /// 
            ///   ID
            /// 
            public string AuthorId { get; set; }
            /// 
            ///     
            /// 
            public string AuthorName { get; set; }
            /// 
            ///     
            /// 
            public string CreatedAt { get; set; }
            /// 
            ///     
            /// 
            public string PublishedAt { get; set; }
            /// 
            ///        
            /// 
            public string IsDeleted { get; set; }
            /// 
            ///       
            /// 
            public bool AllowShow { get; set; }
            /// 
            ///    
            /// 
            public int ViewCount { get; set; }
        }
    }

    属性:CreatedAt,PublishedAt,IsDeletedタイプとレルムモデルPost.csエンティティクラスのデータ型が異なります.

    エンティティマッピングの構成


    次に、[TsBlog.AutoMapperConfig]プロジェクトに戻り、プロジェクトリファレンスに次の参照を追加します.
    TsBlog.Domain TsBlog.ViewModel

    3つのクラスファイルを作成します.cs,AutoMapperStartupTask.cs,MappingExtensions.cs.コードは次のとおりです.
    AutoMapperConfiguration.cs
    using AutoMapper;
    using TsBlog.Domain.Entities;
    using TsBlog.ViewModel.Post;
    
    namespace TsBlog.AutoMapperConfig
    {
        /// 
        /// AutoMapper            
        /// 
        public static class AutoMapperConfiguration
        {
            public static void Init()
            {
                MapperConfiguration = new MapperConfiguration(cfg =>
                {
    
                    #region Post
                    //            
                    cfg.CreateMap()
                        .ForMember(d => d.IsDeleted, d => d.MapFrom(s => s.IsDeleted ? " " : " ")) //               / 
                    ;
                    //            
                    cfg.CreateMap();
                    #endregion
                });
    
                Mapper = MapperConfiguration.CreateMapper();
            }
    
            public static IMapper Mapper { get; private set; }
    
            public static MapperConfiguration MapperConfiguration { get; private set; }
        }
    }

    AutoMapperStartupTask.cs
    namespace TsBlog.AutoMapperConfig
    {
        /// 
        /// AutoMapper    
        /// 
        public class AutoMapperStartupTask 
        {
            public void Execute()
            {
                AutoMapperConfiguration.Init();
            }
        }
    }

    MappingExtensions.cs
    using TsBlog.Domain.Entities;
    using TsBlog.ViewModel.Post;
    
    namespace TsBlog.AutoMapperConfig
    {
        /// 
        ///     -         
        /// 
        public static class MappingExtensions
        {
            public static TDestination MapTo(this TSource source)
            {
                return AutoMapperConfiguration.Mapper.Map(source);
            }
    
            public static TDestination MapTo(this TSource source, TDestination destination)
            {
                return AutoMapperConfiguration.Mapper.Map(source, destination);
            }
    
            #region Post
            public static PostViewModel ToModel(this Post entity)
            {
                return entity.MapTo();
            }
    
            public static Post ToEntity(this PostViewModel model)
            {
                return model.MapTo();
            }
    
            #endregion
    
        }
    } 

    これで、AutoMapperのマッピング構成が完了します.

    AutoMapperの応用


    AutoMapperの構成の初期化


    WEBプロジェクト[TsBlog.Frontend]を開き、プロジェクト[TsBlog.AutoMapperConfig]を参照し、グローバルプロファイルGlobal.asaxでAutoMapperの初期化方法を追加します.
    /// 
    /// AutoMapper      
    /// 
    private void AutoMapperRegister()
    {
        new AutoMapperStartupTask().Execute();
    }

    同時にApplication_Startメソッドで呼び出す、このときのGlobal.asaxファイルコードは次のとおりです.
    using Autofac;
    using Autofac.Integration.Mvc;
    using System.Web.Mvc;
    using System.Web.Routing;
    using TsBlog.AutoMapperConfig;
    using TsBlog.Repositories;
    using TsBlog.Services;
    
    namespace TsBlog.Frontend
    {
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                //BundleConfig.RegisterBundles(BundleTable.Bundles);
    
                AutofacRegister();
    
                AutoMapperRegister();
            }
    
            private void AutofacRegister()
            {
                var builder = new ContainerBuilder();
    
                //  MvcApplication          
                builder.RegisterControllers(typeof(MvcApplication).Assembly);
    
                //       
                builder.RegisterType().As();
                //       
                builder.RegisterType().As();
    
                //     
                builder.RegisterFilterProvider();
    
                var container = builder.Build();
    
                //         
                DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
            }
    
            /// 
            /// AutoMapper      
            /// 
            private void AutoMapperRegister()
            {
                new AutoMapperStartupTask().Execute();
            }
        }
    }

    これでAutoMapperのインストール、構成はほぼ完了し、次にWEBプロジェクト[TsBlog.Frontend]のコントローラ操作でAutoMapperをどのように使用するかを学びます.

    AutoMapperの使用


    1.WEBプロジェクト[TsBlog.Frontend]を開き、TsBlogを追加する.ViewModelの参照.2.ホームコントローラを開きます.cs、コードを次のように変更します.
    using System.Web.Mvc;
    using TsBlog.AutoMapperConfig;
    using TsBlog.Services;
    
    namespace TsBlog.Frontend.Controllers
    {
        public class HomeController : Controller
        {
            private readonly IPostService _postService;
            public HomeController(IPostService postService)
            {
                _postService = postService;
            }
            public ActionResult Index()
            {
                return View();
            }
    
            public ActionResult Post()
            {
                //var postRepository = new PostRepository();
                //var post = postRepository.FindById(1);
                //return View(post);
    
                var post = _postService.FindById(1).ToModel();
                return View(post);
            }
        }
    }

    では、次のようにします.
    var post = _postService.FindById(1);

    次のように変更されました.
    var post = _postService.FindById(1).ToModel();

    ビューファイルを開く:~/View/Home/Post.cshtml,将
    @model TsBlog.Domain.Entities.Post

    次のように変更します.
    @model TsBlog.ViewModel.Post.PostViewModel

    AutoMapperマッピングフィールドをテストするコードの一部を追加します.cs:
    @model TsBlog.ViewModel.Post.PostViewModel
    @{
        Layout = null;
    }
    
    
    
    
    
        
        Post find by id test
    
    
        

    Post id:@Model.Id

    Post Title:@Model.Title

    Post PublishedAt:@Model.PublishedAt

    Post IsDeleted:@Model.IsDeleted


    データベースを開き、PublishedAtフィールドの値を確認します.
    再度F 5を押して実行し、ページを開く[http://localhost:54739/home/post]
    本明細書のソース管理アドレス:https://github.com/lampo1024/...
    本文の勉强はこれで终わります.このシリーズはまだ终わっていません.次の号でまた会いましょう.
    もしあなたがレコードのこのシリーズの文章が好きならば、私のためにとても大きい称賛を注文して、レコードが後続の作文の中で更に基(激)情があることを支持して、ははは...
    本論文はコード友網『一歩一歩ASP.NET MVC 5プログラムを作成する[Repository+Autofac+Automapper+SqlSugar](五)』に同期して発表した.