【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 = , Title = "ASP.NET MVC 4 编程", Price = },
new Book { ID = , Title = "CLR Via C#", Price = },
new Book { ID = , Title = "平凡的世界", Price = }
};
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接口的实现者)的引用。
【ASP.NET MVC 学习笔记】- 06 在MVC中使用Ninject的更多相关文章
- 【ASP.NET MVC 学习笔记】- 05 依赖注入工具Ninject
本文参考:http://www.cnblogs.com/willick/p/3223042.html 1.Ninject是一款轻量级的DI工具,可通过VS的插件NuGet将其引用到项目中. 2.使用N ...
- [ASP.NET MVC] ASP.NET Identity学习笔记 - 原始码下载、ID型别差异
[ASP.NET MVC] ASP.NET Identity学习笔记 - 原始码下载.ID型别差异 原始码下载 ASP.NET Identity是微软所贡献的开源项目,用来提供ASP.NET的验证.授 ...
- ASP.NET MVC学习笔记-----Filter2
ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...
- ASP.NET MVC学习笔记-----Filter
ASP.NET MVC学习笔记-----Filter(1) Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter Au ...
- ASP.NET MVC学习笔记-----Filter(2)
接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用,它需要实现IActionFilter接口: public ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则
ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...
- .NET MVC 学习笔记(一)— 新建MVC工程
一..NET MVC 学习笔记(一)—— 新建MVC工程 接触MVC有段时间了,一直想找机会整理一下,可是限于文笔太差,所以一直迟迟羞于下手,想到最近做过的MVC项目也有一些了,花点时间整理一下方便以 ...
- Spring MVC 学习笔记11 —— 后端返回json格式数据
Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...
- MVC学习笔记索引帖
[MVC学习笔记]1.项目结构搭建及单个类在各个层次中的实现 [MVC学习笔记]2.使用T4模板生成其他类的具体实现 [MVC学习笔记]3.使用Spring.Net应用IOC(依赖倒置) [MVC学习 ...
随机推荐
- 201521123002《Java程序设计》第12周学习总结
本次作业参考文件 正则表达式参考资料 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. FileinputStream,FileoutputStream //字 ...
- Hyperledger Fabric 1.0 从零开始(二)——环境构建(公网)
1:环境构建 在本文中用到的宿主机环境是Centos ,版本为Centos.x86_647.2,通过Docker 容器来运行Fabric的节点,版本为v1.0.因此,启动Fabric网络中的节点需要先 ...
- oracle 数据库管理员
一.数据库管理员每个oracle数据库应该至少有一个数据库管理员(dba),对于一个小的数据库,一个dba就够了,但是对于一个大的数据库可能需要多个dba分担不同的管理职责.那么一个数据库管理员的主要 ...
- SAP Gateway简介
SAP Gateway在S4/HANA时代的ABAP开发模型中有着重要的地位.SAP Gateway是什么?它对ABAP开发有怎样的影响?可以为我们提供哪些方便?这篇译文将浅要地讨论这些话题. SAP ...
- javascript插入before(),after()新DOM方法
随着web的技术突飞猛进的发展.HTML5 ES6等新技术的发展,与此同时DOM等标准也在悄悄的进步,各大浏览器也在悄悄的发展适配新的属性和方法,今天我们来看看Javascript新的DOM的方法 二 ...
- js中+号的另外一种用法
JavaScript中可以在某个元素前使用 ‘+’ 号,这个操作是将该元素转换成Number类型,如果转换失败,那么将得到 NaN. 所以 +new Date 将会调用 Date.prototype ...
- 【POJ】1067 取石子游戏(博弈论)
Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...
- Springboot - 学习笔记 ②
前言 这一篇是关于spring boot中的配置(configuration)的介绍,我们接下来要说的男主就是 “application.properties”. “男神”默认是生成在“/src/ma ...
- Perfect Pth Powers poj1730
Perfect Pth Powers Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16383 Accepted: 37 ...
- C# 7 局部函数剖析
局部函数是C# 7中的一个新功能,允许在一个函数中定义另一个函数. 何时使用局部函数? 局部函数的主要功能与匿名方法非常相似:在某些情况下,创建一个命名函数在读者的认知负担方面代价太大.有时,函数本身 ...