群里一个技术大牛说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. 利用IDE编写C语言程序的一点注意事项

    前言:我是喜欢编程的一只菜鸟,在自学过程中,对遇到的一些问题和困惑,有时虽有一点体会感悟,但时间一长就会淡忘,很不利于知识的积累.因此,想通过博客园这个平台,一来记录自己的学习体会,二来便于向众多高手 ...

  2. SwfUpload vs里运行可以上传文件,放到iis上上传就报404错误。

    网上的答案都是说swfupload 的upload_url 路径要设置成绝对路径,但是我也设置了,但是还是不行,然后又找了方法,终于找到了,点击这里查看 解决办法: <system.webSer ...

  3. c#保留小数点后两位

    double d = 23423.24234234d; Response.Write(d.ToString("0.00"));

  4. [Ecmall]ECMALL目录结构设置与数据库表

    最近在做ecmall的开发,ecmall在开源方面还有待进步啊,官方没有提供开发文档,也没有关于系统架构组织的贡献,使用者都要自己从0开始,官方论坛连二次开发板块都没有,都在哪瞎扯淡,广告一堆.可悲~ ...

  5. Interface Serializable

    public interface Serializable Serializability of a class is enabled by the class implementing the ja ...

  6. 首次接触Winform前端交互

    首次接触到在winform中加入网页,且跟前端脚本交互.找了一下这方面的资料 此博文转载原地址为:http://www.cnblogs.com/Charles2008/archive/2009/08/ ...

  7. 关于Application.Lock和Lock(obj)

    http://www.cnblogs.com/yeagen/archive/2012/03/01/2375610.html 1.Application.Lock和Application.UnLock一 ...

  8. JixiPix 各种图像软件,很不错的说,还有affinity designer

    http://jixipix.com/purchase.html https://www.board4allcz.eu/showthread.php?t=639107 https://affinity ...

  9. Adobe Acrobat XI Pro安装破解

    注册机使用说明: Install Instructions: (Read carefully!) 安装说明(仔细阅读!) 1. Disable your Network card or pull th ...

  10. Python之数据结构篇

    简介: 数据结构是可以处理一些数据的结构,或者说,他们是用来存储一组相关数据的.在python中有三种内建的数据结构,分别是列表.元组合字典.我们将会学习如何使用它们是编程变得简单. 列表 list是 ...