ASP.NET MVC 创建控制器类过程

MvcHandler.ProcessRequestInit()方法:

1.1获取控制器的名称string requiredString = this.RequestContext.RouteData.GetRequiredString("controller");

 

1.2创建控制器类工厂  返回IControllerFactory类型 默认创建的工厂实例为DefaultControllerFactory

factory = this.ControllerBuilder.GetControllerFactory();(注册IoC容器后,控制器类工厂类将交由IoC容器创建)

 

1.3 IControllerFactory.CreateController()

实则调用:DefaultControllerFactory.CreateController()

 

controller = factory.CreateController(this.RequestContext, requiredString);

 

DefaultControllerFactory.CreateController()方法:

1.3.1获取控制器类的Type:

Type controllerType = this.GetControllerType(requestContext, controllerName);

return this.GetControllerInstance(requestContext, controllerType);

 

重要步骤:

DefaultControllerFactory.GetControllerInstance()方法:(自定义的控制类工厂类继承DefaultFactory后,将调用自定义控制器类的GetControllerInstance方法)

1.3.2 IControllerActivator.Create()

实则调用DefaultControllerActivator.Create()

 

return this.ControllerActivator.Create(requestContext, controllerType);

 

DefaultControllerActivator.Create()方法:

1.3.3  IDependencyResolver.GetService()

实则调用DefaultDependencyResolver.GetService()

controller = (IController) (this._resolverThunk().GetService(controllerType) ?? Activator.CreateInstance(controllerType));

 

重要步骤:

DefaultDependencyResolver.GetService()方法:

1.3.4 return Activator.CreateInstance(serviceType);

 

使用IoC容器实现对ASP.Net MVC控制器的依赖注入

Unity为例:(PM> install-package unity.mvc3)

1. 实现IDependencyResolver接口,在Application_Start()通过DependencyResolver.SetResolver()告知MVC,将部分类型实例解析工作交由IoC容器来处理;

2. 继承DefaultControllerFactory,重写GetControllerInstance方法,使用IoC容器实现对控制器类的创建

 

转载于:https://www.cnblogs.com/liubiao/p/5230232.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值