日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【ASP.NET MVC 学习笔记】- 06 在MVC中使用Ninject

發布時間:2024/1/17 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ASP.NET MVC 学习笔记】- 06 在MVC中使用Ninject 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文參考:http://www.cnblogs.com/willick/p/3299077.html

1、在ASP.NET MVC中一個客戶端請求是在特定的Controller的Action中處理的。默認情況下,MVC框架使用內置的Controller工廠類DefaultControllerFactory來創建某個請求對應的Controller的實例。有時候默認的DefaultControllerFactory不能滿足我們的要求時,我們需要自定義繼承自DefaultControllerFactory的Controller工廠類。在ASP.NET MVC中使用Ninject就需要自定一個這樣子的工廠類。示例:

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:后面再來添加綁定 } }

2、Controller工廠類創建好之后,我們需要告訴MVC框架使用我們自定義的NinjectControllerFactory來創建Controller的實例,為此我們需要在Global文件的Application_Start方法中添加以下代碼:

//設置Controller工廠 ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());

3、在MVC中我們使用倉儲模式把數據相關的邏輯和領域實體模型分離,這樣對于使用者來說,通過調用倉儲對象,使用者可以直接拿到自己想要的數據,而完全不必關心數據具體是如何來的。實例:

//倉儲接口 public interface IBookRepository {IQueryable<Book> Books { get; } }//接口實現 public class BookRepository : IBookRepository {public IQueryable<Book> Books {get { return GetBooks().AsQueryable(); }}private static List<Book> GetBooks() { 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;} }

4、NinjectControllerFactory 的AddBindings中添加綁定

ninjectKernel.Bind<IBookRepository>().To<BookRepository>();

5、列表的顯示:

public class BookController : Controller {private IBookRepository repository;public BookController(IBookRepository bookRepository){repository = bookRepository;}public ViewResult List() {return View(repository.Books);} }

6、BookController的創建主要經過下列過程:

? (1)在Application_Start中,ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory())這段注冊代碼告訴MVC用NinjectControllerFactory工廠類來創建所有Controller對象。

? (2)在NinjectControllerFactory類中包含了下面兩個過程:綁定接口到接口的實現和創建Controller類對象。

? (3)ninjectKernel.Bind<IBookRepository>().To<BookRepository>()這段綁定代碼告訴ninjectKernel當被請求一個IBookRepository接口的實現時則返回一個BookRepository對象。

? (4)NinjectControllerFactory類中的GetControllerInstance方法,通過ninjectKernel.Get(controllerType)這句代碼,ninject獲取controller(如BookController)對象的信息并創建該controller的實例,這個過程會調用controller的構造函數,它會自動判斷構造函數所需要的參數,如BookController類的構造函數需要一個IBookRepository接口參數,根據第2個過程ninject注冊的綁定,ninject會給該構造函數傳遞BookRepository對象(IBookRepository接口的實現者)的引用。

轉載于:https://www.cnblogs.com/wangwust/p/6385691.html

總結

以上是生活随笔為你收集整理的【ASP.NET MVC 学习笔记】- 06 在MVC中使用Ninject的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。