如果你已經準備好了開始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,你可以不這麼做,但這樣做有助於模組的分離,使項目層次鮮明、簡潔。 如果你覺得從我的文章中學到了知識,那麼請繼續關注我續篇!