MVC三个IOC注入点之Ninject使用示例
群里一个技术大牛说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使用示例的更多相关文章
- IOC容器特性注入第六篇:利用MVC注入点,把容器启动
这里是利用MVC三个注入点中的:IDependencyResolver 进行注入 在全局类中Global.asax代码如下: #region MVC Inject System.Web.Mvc.Dep ...
- 从零开始实现一个简易的Java MVC框架(三)--实现IOC
Spring中的IOC IoC全称是Inversion of Control,就是控制反转,他其实不是spring独有的特性或者说也不是java的特性,他是一种设计思想.而DI(Dependency ...
- 某cms审计思路,以及ci框架如何找寻注入点
某cms审计思路,以及ci框架如何找寻注入点 ABOUT 之前闲着没事的时候审的某cms,之前看一群大表哥刷过一次这个cms,想着看看还能不能赶得上分一杯羹,还是审计出来些东西,来说一说一个前台注入吧 ...
- 七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理
第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实现方式,创建数据访问层和数据入口,处理Post数据,以及数据验证等功能. 系列文章 七天学会ASP.NET M ...
- BurpSuite导出log配合SQLMAP批量扫描注入点
sqlmap可以批量扫描包含有request的日志文件,而request日志文件可以通过burpsuite来获取, 因此通过sqlmap结合burpsuite工具,可以更加高效的对应用程序是否存在SQ ...
- 基于.NET MVC的高性能IOC插件化架构
基于.NET MVC的高性能IOC插件化架构 最近闲下来,整理了下最近写的代码,先写写架构,后面再分享几个我自己写的插件 最近经过反复对比,IOC框架选择了Autofac,原因很简单,性能出众,这篇博 ...
- Sqlmap注入Base64编码的注入点
不小心删了,找快照才找到的.补回来... 上次遇到一个Base64的注入点,手工注入太麻烦,于是在网上看了一下sqlmap Base64注入的方法,如下: sqlmap -u http://xxxx. ...
- mvc 三个 之间 肮脏的交易
就当个小零食一样写. MVC 是 Model-View-Controller 的缩写,Model代表的是应用的业务逻辑(通过 JavaBean,EJB 组件实现),View 是应用的表示层(由 JSP ...
- Java Spring Boot VS .NetCore (三)Ioc容器处理
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
随机推荐
- 【转】perl特殊符号及默认的内部变量
perl特殊符号及默认的内部变量,有需要的朋友不妨参考下 Perl的特殊符号 @ 数组 $x{} x名字前面是美元符号($),后面是花 ...
- Ubuntu 14.04的SWAP 为0
[@@@@@@]# free total used free shared buffers cached Mem: 1024976 248992 775984 0 16820 73128 -/+ bu ...
- c#加密汇总【粘】
方法一: SHA1[不可逆] //须添加对System.Web的引用 using System.Web.Security; ... /// &l ...
- uva 165
回溯 参考了一下别人的解法 1 必须存在 再枚举下一个数字的时候 从当前可取到的最小数字加一枚举到当前可取到的最大数字加一 /********************************* ...
- javascript div z-index, input tabindex属性说明
<html> <body> <form> 用户名: <input type="text" tabindex="1" / ...
- 在WIN32 DLL中使用MFC库遇到的问题
今天写了一个DLL,DLL中用到的一个类里用到的MSXML的COM组件,所以在DLL中要包含afx.h头文件,也就不可避免的要用到MFC的类库了,但在编译时出现了错误:mfcs42d.lib(dllm ...
- 安卓从业者应该关注:Android 6.0的运行时权限
Android 6.0,代号棉花糖,自发布伊始,其主要的特征运行时权限就很受关注.因为这一特征不仅改善了用户对于应用的使用体验,还使得应用开发者在实践开发中需要做出改变. 没有深入了解运行时权限的开发 ...
- [itint5]根据前序后序遍历统计二叉树
http://www.itint5.com/oj/#28 这题有意思.一开始还想不清楚,看了解释,很棒. 这个题目的特殊之处是所有节点的值都是不一样的. 所以递归过程可以大大简化. 先看两种遍历的性质 ...
- 选择Android还是选择JavaEE?
很多同学咨询过同样的一个问题,该问题也是最备受争议的问题,那就是到底是选择Android还是选择JavaEE.下面发表一些本人的看法. Android属于一个特有的Java技术应用,专注于 ...
- 列出man手册所有函数的方法
locate /man7/|sed -r 's#.*/([^/]+).7.gz$#\1#' locate /man7/ | xargs basename -a -s '.7.gz' apropos - ...