使用MVC4,Ninject,EF,Moq,構建一個真實的應用電子商務SportsStore(一)

來源:互聯網
上載者:User
如果你已經準備好了開始MVC4的遠航,那我們就閑話少說,背起行裝,踏上征途吧! 完成SportsStore電子商務平台,你將學會:1.使用MVC4開發你的應用項目.2.使用Ninject完成IOC注入.3.使用Entity Framework 操作Sql server 資料庫.4.使用Moq測試你的項目。 好了,現在請啟動你的VS2012吧! 我們首先要建立的是一個空的Visual Studio solution。在這個solution中,我們將建立3個工程。1. 一個域模組工程。2.一個MVC4應用。3.一個單元測試工程。 現在我們就建立一個名為SportsStore的空solution,它看起來像下面的:  

工程名

VS工程模板

目的

SportsStore.Domain

Class Library

域Entities和logic;

使用Entity Framework 建立一個repository,並將其設定為一個持久層。

SportsStore.WebUI

ASP.NET MVC 4 Web Application

controllers and views

SportsStore.UnitTests

Unit Test Project

unit tests

 你可以刪除SportsStore.Domain工程中的class1.cs,我們不會使用它。在SportsStore.Domain建兩個檔案夾Abstract,Entities. 在SportsStore.WebUI中建一個檔案夾Infrastructure. 如:   到這一步我們的項目架構的雛形已經出來了,現在我們要為它添加引用。在solusion管理器中,一次右擊每個工程,選擇Add Reference。

工程名

工具依賴

工程依賴

微軟引用

SportsStore.Domain

Entity Framework

None

System.Web.Mvc

System.ComponentModel

.DataAnnotations

SportsStore.WebUI

Ninject

Moq

SportsStore.Domain

 

None

SportsStore.UnitTests

Ninject

Moq

SportsStore.Domain

SportsStore.WebUI

System.Web.Mvc

System.Web

Microsoft.CSharp

 注意:System.Web.Mvc的版本一定選擇4.0.0 設定DI Container 在我們這個應用中,對MVC架構做了很多擴充,這也是我們學習的重點內容,掌握了這些知識點,我們再以後的開發項目中,就能得心應手,構建出穩定的,易於擴充和維護的公司專屬應用程式架構。右擊SportsStore.WebUI工程的Infrastructure檔案夾,選擇添加類,類名為NinjectControllerFactory,代碼如下:
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using System.Web.Routing;using SportsStore.Domain.Abstract;using SportsStore.Domain.Entities;using Moq;using Ninject;using SportsStore.Domain.Concrete;namespace SportsStore.WebUI.Infrastructure{    public class NinjectControllerFactory: DefaultControllerFactory    {            private IKernel ninjectKernel;            public NinjectControllerFactory() {                ninjectKernel = new StandardKernel();                AddBindings();            }            protected override IController GetControllerInstance(RequestContext                requestContext, Type controllerType) {                return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);            }            private void AddBindings() {               //put bindings here            }         }    }

我們現在還沒有添加任何綁定,但是,當我們需要時,能使用 AddBindings 方法去添加. 現在,我們需要去

告訴 MVC 我們打算使用 NinjectController class 去建立Controller對象,要實現這一點,請開啟SportsStore.WebUI工程的Global.asax.cs 檔案,添加代碼:
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Http;using System.Web.Mvc;using System.Web.Optimization;using System.Web.Routing;using SportsStore.WebUI.Infrastructure;namespace SportsStore.WebUI{    // 注意: 有關啟用 IIS6 或 IIS7 傳統模式的說明,    // 請訪問 http://go.microsoft.com/?LinkId=9394801    public class MvcApplication : System.Web.HttpApplication    {        protected void Application_Start()        {            AreaRegistration.RegisterAllAreas();            WebApiConfig.Register(GlobalConfiguration.Configuration);            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);            RouteConfig.RegisterRoutes(RouteTable.Routes);            BundleConfig.RegisterBundles(BundleTable.Bundles);            //Added by wangzhiyue             //We need to tell MVC that we want to use the NinjectController             //class to create controller objects            ControllerBuilder.Current.SetControllerFactory(new                         NinjectControllerFactory());            //Added end            AuthConfig.RegisterAuth();        }    }}

啟動域模組

 

現在我們將要啟動域模組,在MVC應用中應用領域模型,能使每一件事情都變得完美,因此,域 也就必然 是啟動應用的最完美的地方。因為我們要做的電子商務應用,所以,我們需要一個產品,這是在明顯不過的事了。右擊我們剛剛建立的Entities檔案夾,然後建立一個C#類,命名為Product ,代碼如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace SportsStore.Domain.Entities{    public class Product    {        public int ProductID { get; set; }        public string Name { get; set; }        public string Description { get; set; }        public decimal Price { get; set; }        public string Category { get; set; }    }}
 注意這個public關鍵字,因為我們將領域模型分離為獨立的工程,所以將訪問關鍵字定義為public,你可以不這麼做,但這樣做有助於模組的分離,使項目層次鮮明、簡潔。  如果你覺得從我的文章中學到了知識,那麼請繼續關注我續篇! 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.