【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相关推荐
- .NET MVC 学习笔记(一)— 新建MVC工程
一..NET MVC 学习笔记(一)-- 新建MVC工程 接触MVC有段时间了,一直想找机会整理一下,可是限于文笔太差,所以一直迟迟羞于下手,想到最近做过的MVC项目也有一些了,花点时间整理一下方便以 ...
- Spring MVC 学习笔记 对locale和theme的支持
Spring MVC 学习笔记 对locale和theme的支持 Locale Spring MVC缺省使用AcceptHeaderLocaleResolver来根据request header中的 ...
- thinkphp学习笔记7—多层MVC
原文:thinkphp学习笔记7-多层MVC ThinkPHP支持多层设计. 1.模型层Model 使用多层目录结构和命名规范来设计多层的model,例如在项目设计中如果需要区分数据层,逻辑层,服务层 ...
- Spring MVC 学习笔记一 HelloWorld
Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...
- JavaWeb黑马旅游网-学习笔记06【旅游线路分页展示分页展示】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...
- JavaWeb-综合案例(用户信息)-学习笔记06【复杂条件查询功能】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...
- JavaScript学习笔记06【高级——JavaScript中的事件】
w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...
- MySQL学习笔记06【多表查询、子查询、多表查询练习】
MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...
- 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...
机器学习实战(Machine Learning in Action)学习笔记----06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习 作者:米仓山下 时 ...
- opencv学习笔记06
原创:opencv学习笔记06 OpenCV-Python教程:50.理解k-近邻 https://www.jianshu.com/p/404e329e4e80 OpenCV里的kNN 1 2 3 4 ...
最新文章
- 安装LINUX后要怎么找回WIN7启动项?
- ASP.NET防伪令牌与JSON有效载荷
- 【转】CreateWindowEx异常原因汇总
- EveryNote使用说明,好用的文件备注搜索工具
- Flask框架-蓝图系统
- 常见浏览器兼容性问题与解决方案?
- 腾讯云搭svn服务器,腾讯云使用笔记二: 安装svn服务器及web同步
- Hadoop 开源调度系统zeus(二)
- 数学建模学习笔记(一)——层次分析模型
- Extjs格式化时间
- java中引用数据类型和基本数据类型的一些区别(貌似不完整,但会有些启示)
- python写crm_Python CRM项目八
- 作业九 二维数组和字符数组的应用
- python读压缩文件内容_使用Python读写及压缩和解压缩文件的示例
- 从零基础入门Tensorflow2.0 ----八、41. estimator分布式实战
- 动量法与指数加权移动平均
- 各大 Android 手机厂商获取 OAID 开源项目!
- Java流(Stream)
- 惊呆了!C语言也能画小猪佩奇?【附源码】社会我佩奇哥!
- OS20190301