群里一个技术大牛说MVC有三个注入点,但我只会一个DefaultControllerFactory。 在群友的帮助下,我大致了解了下:

IControllerFactory=>IDependencyResolver=>IControllerActivator

这三者的关系如下:

其实从上面的关系可以看出来这三个注入点,相互都存在依赖关系。 我们还是老规矩上代码:

1.IControllerFactory 注入:

    public class NInjectFactory:DefaultControllerFactory
{
private IKernel _iKernel;
public NInjectFactory(IKernel ikernel)
{
this._iKernel = ikernel;
AddBindHelper();
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
return controllerType == null ? null : (IController)_iKernel.Get(controllerType);
} public void AddBindHelper()
{ _iKernel.Bind(typeof(IProduct)).To(typeof(ProductService));
}
}

2.IControllerActivator 注入:

    public class NinjectTwoControlActivator : IControllerActivator
{
private IKernel _ikernel;
public NinjectTwoControlActivator(IKernel ikernel)
{
this._ikernel = ikernel;
AddBindHelper();
} public IController Create(RequestContext requestContext, Type controllerType)
{
return controllerType == null ? null : (IController)_ikernel.Get(controllerType);
} public void AddBindHelper()
{
_ikernel.Bind(typeof(IProduct)).To(typeof(ProductService));
} }

3.IDependencyResolver注入:

    public class NinjectThreeCotrolResolver:IDependencyResolver
{
private IKernel _ikernel;
public NinjectThreeCotrolResolver(IKernel ikernel)
{
this._ikernel = ikernel;
AddBindHelper();
} #region IDependencyResolver Members public object GetService(Type serviceType)
{
try
{
return _ikernel.Get(serviceType);
}
catch
{
return null;
}
} public IEnumerable<object> GetServices(Type serviceType)
{
return Enumerable.Empty<object>();
} #endregion public void AddBindHelper()
{
_ikernel.Bind(typeof(IProduct)).To(typeof(ProductService));
}
}

三个在Global.asax的绑定到全局代码如下:

        protected void Application_Start()
{
AreaRegistration.RegisterAllAreas(); //ControllerBuilder.Current.SetControllerFactory(new NInjectFactory(new Ninject.StandardKernel()));//注册Ninject Ioc //var factory = new DefaultControllerFactory(new NinjectTwoControlActivator(new Ninject.StandardKernel()));
//ControllerBuilder.Current.SetControllerFactory(factory); var dependencyResolver = new NinjectThreeCotrolResolver(new Ninject.StandardKernel());
DependencyResolver.SetResolver(dependencyResolver);
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}

前端控制器实现方式统一如下:

    public class HomeController : Controller
{
private IProduct _iproduct;
public HomeController(IProduct iproduct)
{
this._iproduct = iproduct;
}
public ActionResult Index()
{
var list = new List<Product>()
{
new Product{ProductName="iphone4s",ProductPrice=3700},
new Product{ProductName="iphon5",ProductPrice=3400}
};
ViewBag.Price = _iproduct.GetAll(list); return View();
}
}

利用构造函数从容器中取出来对应的服务,好了,非常感谢群里的的技术指导。非常感谢

from: http://www.cnblogs.com/flyfish2012/p/3282261.html

MVC三个IOC注入点之Ninject使用示例的更多相关文章

  1. IOC容器特性注入第六篇:利用MVC注入点,把容器启动

    这里是利用MVC三个注入点中的:IDependencyResolver 进行注入 在全局类中Global.asax代码如下: #region MVC Inject System.Web.Mvc.Dep ...

  2. 从零开始实现一个简易的Java MVC框架(三)--实现IOC

    Spring中的IOC IoC全称是Inversion of Control,就是控制反转,他其实不是spring独有的特性或者说也不是java的特性,他是一种设计思想.而DI(Dependency ...

  3. 某cms审计思路,以及ci框架如何找寻注入点

    某cms审计思路,以及ci框架如何找寻注入点 ABOUT 之前闲着没事的时候审的某cms,之前看一群大表哥刷过一次这个cms,想着看看还能不能赶得上分一杯羹,还是审计出来些东西,来说一说一个前台注入吧 ...

  4. 七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理

    第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实现方式,创建数据访问层和数据入口,处理Post数据,以及数据验证等功能. 系列文章 七天学会ASP.NET M ...

  5. BurpSuite导出log配合SQLMAP批量扫描注入点

    sqlmap可以批量扫描包含有request的日志文件,而request日志文件可以通过burpsuite来获取, 因此通过sqlmap结合burpsuite工具,可以更加高效的对应用程序是否存在SQ ...

  6. 基于.NET MVC的高性能IOC插件化架构

    基于.NET MVC的高性能IOC插件化架构 最近闲下来,整理了下最近写的代码,先写写架构,后面再分享几个我自己写的插件 最近经过反复对比,IOC框架选择了Autofac,原因很简单,性能出众,这篇博 ...

  7. Sqlmap注入Base64编码的注入点

    不小心删了,找快照才找到的.补回来... 上次遇到一个Base64的注入点,手工注入太麻烦,于是在网上看了一下sqlmap Base64注入的方法,如下: sqlmap -u http://xxxx. ...

  8. mvc 三个 之间 肮脏的交易

    就当个小零食一样写. MVC 是 Model-View-Controller 的缩写,Model代表的是应用的业务逻辑(通过 JavaBean,EJB 组件实现),View 是应用的表示层(由 JSP ...

  9. Java Spring Boot VS .NetCore (三)Ioc容器处理

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

随机推荐

  1. JDBC 简介

    [摘要] 1) JDBC : (Java Database Connectivity ,java数据基础连接)是标准的Java 访问数据库的API.即Java数据库编程接口,是一组标准的Java语言中 ...

  2. showModalDialog 超过问题

    a.aspx页面打开一个弹出模式对话框b.aspx. a.aspx 页面页面代码: function SetPlay() { window.showModalDialog('SetAdvertisin ...

  3. 新的MOVE结构,和在项目中实际的感受

    关于MVC/MVP的瑕疵 MVC 和 MVP是最简单,最脍炙人口的框架结构. 有一段时间, 凡事有一定规模的代码,我都会架在上面,甚至后台程序也不例外(预留出可以注册的用户交互接口,作为后台控制器). ...

  4. Hadoop-2.2.0 + Hbase-0.96.2 + Hive-0.13.1(转)

    From:http://www.itnose.net/detail/6065872.html # 需要软件 Hadoop-2.2.0(目前Apache官网最新的Stable版本) Hbase-0.96 ...

  5. div蒙版+可移动

    <html> <head>     <title></title>     <script src="jquery-1.8.2.js&q ...

  6. 转载:传说中的T检验

    第二周结束:传说中的T检验 小耿2014-01-21 10:58 本文和上一篇笔记一样:语言十分啰嗦.请大家忍耐…… 以前我不懂统计的时候(现在也不懂),只知道数据出来了要做三件事:1,检验一下数据是 ...

  7. Elasticsearch从0.90到1.2的不兼容变化-系统和设置

      本文为官方文档的翻译加个人理解.作者翻译时,elasticsearch(下面简称es)的版本为1.2.1.   1.系统级别及设置方面 1.1 es启动时,默认是作为一个前台程序启动.如果你想让e ...

  8. [转载]再次谈谈easyui datagrid 的数据加载

    这篇文章只谈jQuery easyui datagrid 的数据加载,因为这也是大家谈论最多的内容.其实easyui datagrid加载数据只有两种方式:一种是ajax加载目标url返回的json数 ...

  9. 关于NGUI中的自适应和对齐机制

    原地址:http://blog.sina.com.cn/s/blog_62df69790101gy7t.html 1 关于美术效果图 美术出效果图总是基于某个固定尺寸.移动设备的分辨率却有太多不同的方 ...

  10. C#日期格式及其运算

    C#日期时间格式化 转载: http://www.cnblogs.com/hantianwei/archive/2010/09/23/1833228.html