偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

ASP.NET MVC執(zhí)行異步Action

開(kāi)發(fā) 后端
本文介紹ASP.NET MVC執(zhí)行異步Action,那么控制器對(duì)象必須為Controller類(lèi)型,以及介紹異步Action可能就由兩個(gè)方法組成。

ASP.NET MVC檢查是否為異步Action

我們已經(jīng)形成了一個(gè)約定:如果要執(zhí)行一個(gè)異步Action,那么控制器對(duì)象必須為Controller類(lèi)型。這個(gè)約定的目的是為了使用Controller類(lèi)中包含的IActionInvoker——確切地說(shuō),是ControllerActionInvoker類(lèi)型里的功能。因此,另一個(gè)約定便是Controller的ActionInvoker對(duì)象必須返回一個(gè)ControllerActionInvoker的實(shí)例。

ControllerActionInvoker中有一些輔助方法,能夠返回對(duì)于一個(gè)Controller或Action的描述對(duì)象。從一個(gè)Action描述對(duì)象中我們可以獲取關(guān)于這個(gè)Action的各種信息,而它是否被標(biāo)記了AsyncActionAttribute,就是我們判斷這個(gè)Action是否應(yīng)該被異步執(zhí)行的依據(jù)。如下:

  1. publicclassSyncMvcHandler:IHttpHandler,IRequiresSessionState  
  2. {  
  3. publicSyncMvcHandler(  
  4. IControllercontroller,  
  5. IControllerFactorycontrollerFactory,  
  6. RequestContextrequestContext)  
  7. {  
  8. this.Controller=controller;  
  9. this.ControllerFactory=controllerFactory;  
  10. this.RequestContext=requestContext;  
  11. }  
  12.  
  13. publicIControllerController{get;privateset;}  
  14. publicRequestContextRequestContext{get;privateset;}  
  15. publicIControllerFactoryControllerFactory{get;privateset;}  
  16.  
  17. publicvirtualboolIsReusable{get{returnfalse;}}  
  18.  
  19. publicvirtualvoidProcessRequest(HttpContextcontext)  
  20. {  
  21. try  
  22. {  
  23. this.Controller.Execute(this.RequestContext);  
  24. }  
  25. finally  
  26. {  
  27. this.ControllerFactory.ReleaseController(this.Controller);  
  28. }  
  29. }  

ControllerActionInvoker類(lèi)型中有個(gè)protected方法GetControllerDescriptor,它接受一個(gè)ControllerContext類(lèi)型的參數(shù),并返回一個(gè)ControllerDescriptor對(duì)象來(lái)描述當(dāng)前控制器,而從該描述對(duì)象中可以通過(guò)FindAction方法獲得一個(gè)ActionDescriptor對(duì)象來(lái)描述即將執(zhí)行的Action。如果是一個(gè)不存在的Action,那么就返回false,最后就通過(guò)SyncMvcHandler對(duì)象來(lái)執(zhí)行默認(rèn)的行為。當(dāng)且僅當(dāng)該Action上擁有AsyncActionAttribute 標(biāo)記時(shí),才說(shuō)明它應(yīng)該被異步執(zhí)行,返回true。此外,這段代碼中用到了MethodInvoker,這是一個(gè)輔助類(lèi),它來(lái)源于Fast Reflection Library,它實(shí)現(xiàn)了反射調(diào)用功能,但是它的性能十分接近于方法的直接調(diào)用,我在這篇文章中詳細(xì)描述了這個(gè)項(xiàng)目的功能和使用。

這段代碼便涉及到ASP.NET MVC RC版本在Beta版本基礎(chǔ)上的改進(jìn)。在原先的ControllerActionInvoker類(lèi)中只有獲取Action方法的MethodInfo,而沒(méi)有RC中各描述對(duì)象這樣的抽象類(lèi)型。從目前的設(shè)計(jì)上來(lái)看,我們使用的都是基于反射的抽象描述類(lèi)型的子類(lèi)。例如默認(rèn)情況下,我們通過(guò)ActionDescriptor抽象類(lèi)型訪問(wèn)的實(shí)際上是ReflectedActionDescriptor類(lèi)型的實(shí)例。這是一個(gè)很有用的改進(jìn),由于我們通過(guò)描述對(duì)象進(jìn)行抽象,于是我們就可以:

使用不同的實(shí)現(xiàn)方式來(lái)描述各對(duì)象,默認(rèn)情況下是使用基于反射(也就是“約定”)的實(shí)現(xiàn),如果需要的話我們也可以使用基于配置文件的方式替換現(xiàn)有實(shí)現(xiàn)。

使用特定對(duì)象的描述方式可以不拘泥于內(nèi)部細(xì)節(jié),例如一個(gè)異步Action可能就由兩個(gè)方法組成。
有了特定的描述對(duì)象,也方便添加額外的屬性,例如該Action是否應(yīng)該異步執(zhí)行,是否應(yīng)該禁用Session State等等。以上介紹ASP.NET MVC執(zhí)行異步Action

【編輯推薦】

  1. 介紹ASP.NET 2.0虛擬主機(jī)
  2. 淺談ASP.NET應(yīng)用程序
  3. 優(yōu)化ASP.NET 2.0 Profile Provider
  4. 淺談ASP.NET管道優(yōu)化
  5. 介紹ASP.NET Routing引擎
責(zé)任編輯:佚名 來(lái)源: IT168
相關(guān)推薦

2009-03-06 10:28:30

MVCASP.NET異步Action

2009-02-16 10:05:11

ActionMVCASP.NET

2009-02-17 09:22:14

ActionMVCASP.NET

2009-07-22 09:11:02

Action方法ASP.NET MVC

2009-07-31 12:43:59

ASP.NET MVC

2009-07-24 13:20:44

MVC框架ASP.NET

2010-04-06 15:20:56

ASP.NET MVC

2009-07-23 14:31:20

ASP.NET MVC

2009-07-22 13:24:24

ASP.NET MVC

2009-07-22 10:09:59

ASP.NET MVC

2009-07-20 10:53:59

ASP.NET MVC

2009-07-23 15:44:39

ASP.NET MVC

2010-02-05 08:32:32

ASP.NET MVC

2009-08-14 17:57:43

ASP.NET MVC

2009-07-28 16:40:11

ASP.NET異步頁(yè)面

2015-06-17 17:01:48

ASP.NET

2021-03-08 07:32:05

Actionweb框架

2010-06-23 15:44:03

ASP.NET MVC

2009-04-01 12:00:43

ASP.NETMVC

2009-07-23 11:33:18

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)