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容器实现对控制器类的创建

ASP.NET MVC 创建控制器类过程的更多相关文章

  1. .NET/ASP.NET MVC Controller 控制器(IController控制器的创建过程)

    阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactory 控制器工厂接口 3.ASP.NETMVC DefaultControllerFactory 默认控制器工厂 4 ...

  2. 三、ASP.NET MVC Controller 控制器(二:IController控制器的创建过程)

    阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactory 控制器工厂接口 3.ASP.NETMVC DefaultControllerFactory 默认控制器工厂 4 ...

  3. [ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分钟内用ASP.Net MVC创建一个电影数据库应用程序》

    [ASP.NET MVC2 系列]      [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序>       ...

  4. ASP.NET Web API 控制器执行过程(一)

    ASP.NET Web API 控制器执行过程(一) 前言 前面两篇讲解了控制器的创建过程,只是从框架源码的角度去简单的了解,在控制器创建过后所执行的过程也是尤为重要的,本篇就来简单的说明一下控制器在 ...

  5. ASP.NET MVC 5 - 控制器

    MVC代表: 模型-视图-控制器 .MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程序包含: · Models: 表示该应用程序的数据并使用验证逻辑来强制实施业务规则的数据 ...

  6. [转]ASP.NET MVC 5 - 控制器

    MVC代表: 模型-视图-控制器 .MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程序包含: · Models: 表示该应用程序的数据并使用验证逻辑来强制实施业务规则的数据 ...

  7. 一点ASP.NET MVC Html.Helper类的方法

    一点ASP.NET MVC Html.Helper类 这里就只写一个Html.ActionLink()和Html.DropdownList(). Html.ActionLink()里有三个参数,第一个 ...

  8. ASP.NET MVC创建的网站

    ASP.NET MVC创建的网站   最近在写一个网站,昨天刚写完,由于要和朋友一起测试,但是他电脑上没有环境,所以希望我在自己电脑上部署一下,让他直接通过浏览器来访问来测试,所以从昨晚到今天上午,通 ...

  9. c#异步编程(三)—ASP.NET MVC 异步控制器及EF异步操作

    ASP.NET MVC 异步控制器及EF异步操作 异步控制器 ASP.NET MVC2后开始了对异步请求管道的支持,异步请求管道的作用是允许web服务器处理长时间运行的请求,比如 那些花费大量时间等待 ...

随机推荐

  1. Microsoft IoT Starter Kit 开发初体验-反馈控制与数据存储

    在上一篇文章<Microsoft IoT Starter Kit 开发初体验>中,讲述了微软中国发布的Microsoft IoT Starter Kit所包含的硬件介绍.开发环境搭建.硬件 ...

  2. ABP入门系列(7)——分页实现

    ABP入门系列目录--学习Abp框架之实操演练 完成了任务清单的增删改查,咱们来讲一讲必不可少的的分页功能. 首先很庆幸ABP已经帮我们封装了分页实现,实在是贴心啊. 来来来,这一节咱们就来捋一捋如何 ...

  3. HDU5835

    Danganronpa Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  4. Google HTML/CSS 编码规范

    Google HTML/CSS 规范 本文介绍了 Google 推荐的 HTML 和 CSS 编写格式规范,以建立良好的个人编码习惯. 1.通用样式规范 省略图片.样式.脚本以及其他媒体文件 URL ...

  5. MongoDB基础之五:游标

    1.cursor(游标)是什么 ? 通俗的说,游标不是查询结果,而是查询的返回资源,或者接口. 通过这个接口,你可以逐条读取. 就像php中的fopen打开文件,得到一个资源一样, 通过资源,可以一行 ...

  6. list与数组转换

    1.数组转换list (1) List myList = new ArrayList(); String[] myStringArray = new String[] {"Java" ...

  7. spring配置文件头部xmlns配置精髓

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...

  8. MySQL主从复制的原理和实践操作

    MySQL 主从(MySQL Replication),主要用于 MySQL 的实时备份.高可用HA.读写分离.在配置主从复制之前需要先准备 2 台 MySQL 服务器. 一.MySQL主从原理 1. ...

  9. jQuery中绑定事件bind() on() live() one()的异同

    jQuery中绑定事件的四种方法,他们可以同时绑定一个或多个事件 bind()-------------------------版本号小于3.0(在Jquery3.0中已经移除,相应unbind()也 ...

  10. Spring IoC介绍与Bean的使用

    1. 介绍 IoC   IoC-Inversion of Control,即"控制反转",它不是什么技术,而是一种设计思想.在 Java 开发中, IoC意味着将设计好的对象交给容 ...