ASP.NET MVC三个重要的描述对象:ControllerDescriptor与ActionDescriptor

ControllerDescriptor与ActionDescriptor的创建

不论是用于描述Controller的ControllerDescriptor,还是用于描述Action方 法的ActionDescriptor,都具有同步和异步两个版本,那么这些不同类型的 ControllerDescriptor的ActionDescriptor是在什么情况下创建的呢?

一、ControllerActionInvoker与AsyncControllerActionInvoker

ControllerDescriptor的创建设计到一个重要的名为ActionInvoker的组件, 顾名思义,ActionInvoker专门用于Action方法的执行。我们会在本书第7章 “Action方法的执行”中对ActionInvoker进行深入介绍,在这里我们只需要对其 作一个简单的了解。

ActionInvoker实现了具有如下定义的IActionInvoker接口,唯一的方法实现 了对指定Action方法的执行,而作为Controller的默认基类的Controller具有一 个ActionInvoker属性,该属性表示的ActionInvoker被真正用于定义在该 Controller类型中的所有Action方法的执行。

   1: public interface IActionInvoker   2: {   3:     bool InvokeAction(ControllerContext controllerContext, string actionName);   4: }   5:    6: public abstract class Controller   7: {   8:     //其它成员   9:     public IActionInvoker ActionInvoker { get; set; }  10: }

而具有如下定义的System.Web.Mvc.Async.IAsyncActionInvoker接口是 ActionInvoker的异步版本。IAsyncActionInvoker继承了IActionInvoker接口, 并在此基础上定义了两个BeginInvokeAction/EndInvokeAction方法用于Action方 法的异步执行。

   1: public interface IAsyncActionInvoker : IActionInvoker   2: {   3:     IAsyncResult BeginInvokeAction(ControllerContext controllerContext,  string actionName, AsyncCallback callback, object state);   4:     bool EndInvokeAction(IAsyncResult asyncResult);   5: }

ASP.NET MVC真正用于Action方法同步和异步执行的ActionInvoker分别是 ControllerActionInvoker和AsyncControllerActionInvoker。如下面的代码片断 所示,ControllerActionInvoker定义了一个受保护的方法 GetControllerDescriptor用于根据指定的Controller上下文获取相应的 ControllerDescriptor,它的子类AsyncControllerActionInvoker对这个方法进 行了重写。

   1: public class ControllerActionInvoker : IActionInvoker   2: {   3:     //其它成员   4:     protected virtual ControllerDescriptor GetControllerDescriptor( ControllerContext controllerContext);   5: }   6:    7: public class AsyncControllerActionInvoker : ControllerActionInvoker,  IAsyncActionInvoker, IActionInvoker   8: {   9:     //其它成员  10:     protected override ControllerDescriptor GetControllerDescriptor( ControllerContext controllerContext);  11: }

我们所有要了解的是在默认情况下(没有对Controller类型的ActionInvoker 属性进行显式设置)采用的ActionInvoker类型是哪个。ASP.NET MVC对Conroller 采用的ActionInvoker类型的选择机制是这样的:

通过当前的DependencyResolver以IAsyncActionInvoker接口去获取注册的 ActionInvoker,如果返回对象不为Null,则将其作为默认的ActionInvoker。

通过当前的DependencyResolver以IActionInvoker接口去获取注册的 ActionInvoker,如果返回对象不为Null,则将其作为默认的ActionInvoker。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索action
, controller
, 方法
mvc异步返回action
,以便于您获取更多的相关知识。

时间: 2024-12-23 09:06:33

ASP.NET MVC三个重要的描述对象:ControllerDescriptor与ActionDescriptor的相关文章

ASP.NET MVC三个重要的描述对象:ControllerDescriptor和ActionDescriptor的创建

不论是用于描述Controller的ControllerDescriptor,还是用于描述Action方法的ActionDescriptor,都具有同步和异步两个版本,那么这些不同类型的ControllerDescriptor的ActionDescriptor是在什么情况下创建的呢? 一.ControllerActionInvoker与AsyncControllerActionInvoker ControllerDescriptor的创建设计到一个重要的名为ActionInvoker的组件,顾名

ASP.NET MVC三个重要的描述对象:ParameterDescriptor

Model绑定是为作为目标Action的方法准备参数列表的过程,所以针对参数的 描述才是Model绑定的核心.在ASP.NET MVC应用编程接口中,服务于Model绑定的 参数元数据通过ParameterDescriptor类型来表示,而ActionDescriptor的 GetParameters方法返回的就是一个ParameterDescriptor数组. 如下面的代码片断所示,ParameterDescriptor同样实现了 ICustomAttributeProvider接口提供应用在

ASP.NET MVC三个重要的描述对象:ControllerDescriptor

ASP.NET MVC应用的请求都是针对某个Controller的某个Action方法,所以对 请求的处理最终体现在对目标Action方法的执行.而Action方法具有相应的参数 ,所以在方法执行之前必须根据相应的规则从请求中提取相应的数据并将其转换 为Action方法参数列表,我们将这个过程称为Model绑定.在ASP.NET MVC应用编 程接口中,Action方法某个参数的元数据通过ParameterDescriptor表示,而两个 相关的类型ControllerDescriptor和Ac

ASP.NET MVC三个重要的描述对象:ActionDescriptor

在Model绑定过程中会通过激活的Controller类型创建用于描述它的 ControllerDescriptor对象.Controller是一组Action方法的集合,而每一个 Action通过ActionDescriptor对象来表示,在这篇文章中我们就来着重谈谈不同 类型的ActionDescriptor.[本文已经同步到<How ASP.NET MVC Works?>中] 一.ActionDescriptor 用于描述定义在Controller类中的Action方法的ActionDe

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

  第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实现方式,创建数据访问层和数据入口,处理Post数据,以及数据验证等功能. 系列文章 七天学会ASP.NET MVC (一)--深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)--ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)--ASP.Net MVC 数据处理 七天学会ASP.NET MVC (四)--用户授权认证问题 七天学会ASP.NET MVC (五

学习ASP.NET MVC(三) Controller/Action 深入解析与应用实例

一.摘要 一个Url请求经过了Routing处理后会调用Controller的Action方法. 中间的过程是怎样的? Action方 法中返回ActionResult对象后,如何到达View的? 本文将讲解Controller的基本用法, 深入分析 Controller的运行机制, 并且提供了创建所有类型Action的代码. 值得学习ASP.NET MVC时参考. 二.承上启下 在上一篇文章中, 我已经学会了如何使用Routing获取Controller和Action, 随后的程序会调用 Co

ASP.NET MVC的运行机制

一.ASP.NET + MVC IIS与ASP.NET管道 MVC.MVP以及Model2[上篇] MVC.MVP以及Model2[下篇] ASP.NET MVC是如何运行的[1]: 建立在"伪"MVC框架上的Web应用 ASP.NET MVC是如何运行的[2]: URL路由 ASP.NET MVC是如何运行的[3]: Controller的激活 ASP.NET MVC是如何运行的[4]: Action的执行 二.URL 路由 ASP.NET的路由系统:URL与物理文件的分离 ASP.

How ASP.NET MVC Works?

一.ASP.NET + MVC IIS与ASP.NET管道 MVC.MVP以及Model2[上篇] MVC.MVP以及Model2[下篇] ASP.NET MVC是如何运行的[1]: 建立在"伪"MVC框架上的Web应用 ASP.NET MVC是如何运行的[2]: URL路由 ASP.NET MVC是如何运行的[3]: Controller的激活 ASP.NET MVC是如何运行的[4]: Action的执行 二.URL 路由 ASP.NET的路由系统:URL与物理文件的分离 ASP.

ASP.NET MVC下的四种验证编程方式[续篇]

原文:ASP.NET MVC下的四种验证编程方式[续篇] 在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注ValidationAttribute特性"."让数据类型实现IValidatableObject或者IDataErrorInfo"),那么在ASP.NET MVC框架内部是如何提供针对这四种不同编程方式的支持的呢?接下来我们就来聊聊这背后的