[ASP.NET MVC 小牛之路]05 - 使用 Ninject
[ASP.NET
MVC 小牛之路]05 - 使用Ninject
在[ASP.NET MVC 小牛之路]系列上一篇文章(依賴注入(DI)和Ninject)的末尾提到了在ASP. NET
MVC中使用Ninject要做的兩件事情,續這篇文章之後,本文將以一個實際的範例來示範Ninject在ASP.NET MVC中的應用。
為了更好的理解和撐握本文內容,強烈建議初學者閱讀本文前先閱讀依賴注入(DI)和Ninject。
本文目錄:
準備工作
新建一個名為BookShop的空白解決方案。在該解決方案中分別新增一個名為BookShop.WebUI的MVC空白應用程序,和一個名為BookShop.Domain的類別庫工程。目錄架構如下:
兩個工程加入完後,在BookShop.WebUI工程下加入BookShop.Domain工程的引用。
使用NuGet分別為BookShop.WebUI工程和BookShop.Domain工程安裝Ninject套件(NuGet的介紹請閱讀依賴注入(DI)和Ninject)。可以透過視覺化視窗安裝,也可以開啟Package
Manager Console(視圖->其他視窗->Package Manager Console)執行下列指令安裝:
Install-Package Ninject -Project BookShop.WebUI
.Domain
下圖說明安裝成功:
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() { // todo:后面再来添加绑定 } }
Controller工廠類別創建好後,我們就需要告訴MVC用我們的NinjectControllerFactory類別來創建Controller對象,為此,需在Global.asax文件的Application_Start方法中添加下面代碼:
protected void Application_Start() { ...... //设置Controller工厂 ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory()); }
在MVC應用程式中,一切都是圍繞Domain Model(領域模型)來的。 所以我們在BookShop.Domain工程中專門建造一個名為Entities的資料夾,用來存放領域實體模型。作為一個電子商務類的網路書店,當然最重要的一個領域實體就是Book了。由於只是為了演示,我們簡單定義一個Book類,並在Entities資料夾中添加該類,程式碼如下:
public class Book { public int ID { get; set; } public string Title { get; set; } public string Isbn { get; set; } public string Summary { get; set; } public string Author { get; set; } public byte[] Thumbnail { get; set; } public decimal Price { get; set; } public DateTime Published { get; set; } }
添加Repository
我们知道,我们肯定需要一种方式来从数据库中读取Book数据。在这我们不防为数据的使用者(这里指Controller)提供一个IBookRepository接口,在这个接口中声明一个IQueryable
public interface IBookRepository { IQueryable<Book> Books { get; } }
在MVC中我们一般会用仓储模式(Repository Pattern)把数据相关的逻辑和领域实体模型分离,这样对于使用者来说,通过调用仓储对象,使用者可以直接拿到自己想要的数据,而完全不必关心数据具体是如何来的。我们可以把仓储比喻成一个超市,超市已经为消费者供备好了商品,消费者只管去超市选购自己需要的商品,而完全不必关心这些商品是从哪些供应商怎么样运输到超市的。但对于仓储本身,必须要实现读取数据的“渠道”。
在BookShop.Domain工程中添加一个名为Concrete文件夹用于存放具体的类。我们在Concrete文件夹中添加一个实现了IBookRepository接口的BookRepository类来作为我们的Book数据仓储。BookRepository类代码如下:
public class BookRepository : IBookRepository { public IQueryable<Book> Books { get { return GetBooks().AsQueryable(); } } private static List<Book> GetBooks() { //为了演示,这里手工造一些数据,后面会介绍使用EF从数据库中读取。 List<Book> books = new List<Book>{ new Book { ID = 1, Title = "ASP.NET MVC 4 编程", Price = 52}, new Book { ID = 2, Title = "CLR Via C#", Price = 46}, new Book { ID = 3, Title = "平凡的世界", Price = 37} }; return books; } }
为了演示,上面是手工造的一些数据,后面的文章我将介绍使用Entity Framwork从数据库中读取数据。对于刚接触ORM框架的朋友可能对这里IQueryable感到奇怪,为什么用IQueryable作为返回类型,而不用IEnumerable呢?后面有机会讲Entity Framwork的时候再讲。
添加绑定
打开之前我们在BookShop.WebUI工程创建的NinjectControllerFactory类,在AddBindings方法中添加如下代码
private void AddBindings() { ninjectKernel.Bind<IBookRepository>().To<BookRepository>(); }
这句代码,通过Ninject把IBookRepository接口绑定到BookRepository,当IBookRepository接口的实现被请求时,Ninject将自动创建BookRepository类的实例。
到这里,Ninject的使用步骤就结束了,接下来我们把本示例剩余的步骤完成。
显示列表
右击BookShop.WebUI工程的Controllers文件夹,添加一个名为Book的Controller,按下面代码对其进行编辑:
public class BookController : Controller { private IBookRepository repository; public BookController(IBookRepository bookRepository) { repository = bookRepository; } }
在这,BookController的构造函数接受了一个IBookRepository参数,当BookController被实例化的时候,Ninject就为其注入了BookRepository的依赖。接下来我们为这个Controller添加一个名为List的Action,用来呈现Book列表。代码如下:
public class BookController : Controller { ... public ViewResult List() { return View(repository.Books); } }
当然我们需要添加一个View。右击上面的List方法,选择添加视图,在弹出的窗口进行如下配置:
然后我们在List.cshtml中用foreach循环来列举书本信息,代码如下:
@model IEnumerable<BookShop.Domain.Entities.Book> @{ ViewBag.Title = "Books"; } @foreach (var p in Model) { <div class="item" style="border-bottom:1px dashed silver;"> <h3 id="p-Title">@p.Title</h3> <p>价格:@p.Price.ToString("c") </p> </div> }
最后我们还需要修改一下默认路由,让系统运行后直接导向到我们的{controller = "Book", action = "List"},打开Global.asax文件,找到RegisterRoutes方法,进行如下修改:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Book", action = "List", id = UrlParameter.Optional } ); }
到这,我们的程序可以运行了,效果如下:
結論:
本文是Ninject在ASP.NET MVC中使用的簡單範例,目的是讓大家了解Ninject在MVC中的使用方法。當然,Ninject的強大之處不僅限於本文所示範的,相信當你熟悉了Niject之後,在搭建MVC應用程式時,你一定會喜歡上它的。
以上就是[ASP.NET MVC 小牛之路]05 - 使用 Ninject的內容,更多相關內容請關注PHP中文網(www.php.cn)!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

引言在當今快速發展的數位世界中,建立健壯、靈活且可維護的WEB應用程式至關重要。 PHPmvc架構提供了實現這一目標的理想解決方案。 MVC(模型-視圖-控制器)是一種廣泛使用的設計模式,可將應用程式的各個方面分離為獨立的元件。 MVC架構的基礎MVC架構的核心原理是分離關注點:模型:封裝應用程式的資料和業務邏輯。視圖:負責呈現資料並處理使用者互動。控制器:協調模型和視圖之間的交互,管理使用者請求和業務邏輯。 PHPMVC架構phpMVC架構遵循傳統MVC模式,但也引進了語言特定的功能。以下是PHPMVC

mvc架構(模型-視圖-控制器)是PHP開發中最受歡迎的模式之一,因為它為組織程式碼和簡化WEB應用程式的開發提供了清晰的結構。雖然基本的MVC原理對於大多數Web應用程式來說已經足夠,但對於需要處理複雜資料或實現高級功能的應用程序,它存在一些限制。分離模型層分離模型層是高階MVC架構常見的技術。它涉及將模型類分解為較小的子類,每個子類專注於特定功能。例如,對於一個電子商務應用程序,您可以將主模型類別分解為訂單模型、產品模型和客戶模型。這種分離有助於提高程式碼的可維護性和可重複使用性。使用依賴注入依賴

SpringMVC框架解密:為什麼它如此受歡迎,需要具體程式碼範例引言:在當今的軟體開發領域中,SpringMVC框架已經成為開發者非常喜愛的一種選擇。它是基於MVC架構模式的Web框架,提供了靈活、輕量、高效的開發方式。本文將深入探討SpringMVC框架的魅力所在,並透過具體的程式碼範例來展示其強大之處。一、SpringMVC框架的優勢靈活的配置方式Spr

MVC(Model-View-Controller)模式是一種常用的軟體設計模式,可以幫助開發人員更好地組織和管理程式碼。 MVC模式將應用程式分為三個部分:模型(Model)、視圖(View)和控制器(Controller),每個部分都有自己的角色和職責。在本文中,我們將討論如何使用PHP實作MVC模式。模型(Model)模型代表應用程式的資料和資料處理。通常,

如何在PHP8框架中實現可擴展的MVC架構引言:隨著互聯網的快速發展,越來越多的網站和應用程式採用了MVC(Model-View-Controller)架構模式。 MVC架構的主要目標是將應用程式的不同部分分開,以便提高程式碼的可維護性和可擴展性。在本文中,我們將介紹如何在PHP8框架中實現可擴充的MVC架構。一、了解MVC架構模式MVC架構模式是一種軟體設

在Web開發中,MVC(Model-View-Controller)是一種常用的架構模式,用於處理和管理應用程式的資料、使用者介面和控制邏輯。 PHP作為流行的Web開發語言,也可以藉助MVC架構設計和建構Web應用程式。本文將介紹如何在PHP中使用MVC架構設計項目,並說明其優點和注意事項。什麼是MVCMVC是一種軟體架構模式,通常用於Web應用程式中。 MV

PHP8框架開發MVC:初學者需要知道的重要概念和技巧引言:隨著網路的快速發展,Web開發在當今的軟體開發產業中扮演著重要的角色。 PHP被廣泛用於Web開發,並且有許多成熟的框架可以幫助開發人員更有效率地建立應用程式。其中,MVC(Model-View-Controller)架構是最常見且廣泛使用的模式之一。本文將介紹初學者在使用PHP8框架開發MVC應用程

模型-視圖-控制器(mvc)架構是一種強大的設計模式,用於建立可維護且可擴展的WEB應用程式。 PHPMVC架構將應用程式邏輯分解為三個不同的元件:模型:表示應用程式中的資料和業務邏輯。視圖:負責呈現資料給使用者。控制器:充當模型和視圖之間的橋樑,處理使用者請求並協調其他元件。 MVC架構的優點:程式碼分離:MVC將應用程式邏輯與表示層分離,提高了可維護性和可擴充性。可重複使用性:視圖和模型元件可以跨不同的應用程式重複使用,減少重複程式碼。效能優化:MVC架構允許快取視圖和模型結果,從而提高網站速度。測試友善:分離
