本文参考: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相关推荐

  1. .NET MVC 学习笔记(一)— 新建MVC工程

    一..NET MVC 学习笔记(一)-- 新建MVC工程 接触MVC有段时间了,一直想找机会整理一下,可是限于文笔太差,所以一直迟迟羞于下手,想到最近做过的MVC项目也有一些了,花点时间整理一下方便以 ...

  2. Spring MVC 学习笔记 对locale和theme的支持

    Spring MVC 学习笔记 对locale和theme的支持 Locale Spring MVC缺省使用AcceptHeaderLocaleResolver来根据request header中的 ...

  3. thinkphp学习笔记7—多层MVC

    原文:thinkphp学习笔记7-多层MVC ThinkPHP支持多层设计. 1.模型层Model 使用多层目录结构和命名规范来设计多层的model,例如在项目设计中如果需要区分数据层,逻辑层,服务层 ...

  4. Spring MVC 学习笔记一 HelloWorld

    Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...

  5. JavaWeb黑马旅游网-学习笔记06【旅游线路分页展示分页展示】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  6. JavaWeb-综合案例(用户信息)-学习笔记06【复杂条件查询功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...

  7. JavaScript学习笔记06【高级——JavaScript中的事件】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  8. MySQL学习笔记06【多表查询、子查询、多表查询练习】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  9. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...

    机器学习实战(Machine Learning in Action)学习笔记----06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习 作者:米仓山下 时 ...

  10. opencv学习笔记06

    原创:opencv学习笔记06 OpenCV-Python教程:50.理解k-近邻 https://www.jianshu.com/p/404e329e4e80 OpenCV里的kNN 1 2 3 4 ...

最新文章

  1. 安装LINUX后要怎么找回WIN7启动项?
  2. ASP.NET防伪令牌与JSON有效载荷
  3. 【转】CreateWindowEx异常原因汇总
  4. EveryNote使用说明,好用的文件备注搜索工具
  5. Flask框架-蓝图系统
  6. 常见浏览器兼容性问题与解决方案?
  7. 腾讯云搭svn服务器,腾讯云使用笔记二: 安装svn服务器及web同步
  8. Hadoop 开源调度系统zeus(二)
  9. 数学建模学习笔记(一)——层次分析模型
  10. Extjs格式化时间
  11. java中引用数据类型和基本数据类型的一些区别(貌似不完整,但会有些启示)
  12. python写crm_Python CRM项目八
  13. 作业九 二维数组和字符数组的应用
  14. python读压缩文件内容_使用Python读写及压缩和解压缩文件的示例
  15. 从零基础入门Tensorflow2.0 ----八、41. estimator分布式实战
  16. 动量法与指数加权移动平均
  17. 各大 Android 手机厂商获取 OAID 开源项目!
  18. Java流(Stream)
  19. 惊呆了!C语言也能画小猪佩奇?【附源码】社会我佩奇哥!
  20. OS20190301

热门文章

  1. java泛型(三)、通配符的使用
  2. 我尽力了,为啥还是Bug不断?
  3. python中isdigit()、isdecimal()和isnumeric的区别!
  4. Mysql 会导致锁表的语法
  5. Python Demo 06 金庸武侠写作风格分析
  6. hadoop配置文件加载机制
  7. @RequiredArgsConstructor用法
  8. RxJava 2.x 教程
  9. 在一头扎进机器学习前应该知道的那些事儿
  10. [设计原则与模式] 如何理解TDD的三条规则