【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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习网站分享 - 菜鸟教程
- 下一篇: Java--数组