真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ASP.NETMVC框架的ActionInvoker是什么

本篇內(nèi)容介紹了“ASP.NET MVC框架的ActionInvoker是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)作為成都網(wǎng)站建設(shè)公司,專注成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計,有關(guān)成都定制網(wǎng)頁設(shè)計方案、改版、費(fèi)用等問題,行業(yè)涉及成都自上料攪拌車等多個領(lǐng)域,已為上千家企業(yè)服務(wù),得到了客戶的尊重與認(rèn)可。

對于執(zhí)行同步Action的SyncMvcHandler,其實現(xiàn)十分簡單而直接,以下是ASP.NET MVC框架的ActionInvoker。

publicclassSyncMvcHandler:IHttpHandler,IRequiresSessionState  {  publicSyncMvcHandler(  IControllercontroller,  IControllerFactorycontrollerFactory,  RequestContextrequestContext)  {  this.Controller=controller;  this.ControllerFactory=controllerFactory;  this.RequestContext=requestContext;  }   publicIControllerController{get;privateset;}  publicRequestContextRequestContext{get;privateset;}  publicIControllerFactoryControllerFactory{get;privateset;}   publicvirtualboolIsReusable{get{returnfalse;}}   publicvirtualvoidProcessRequest(HttpContextcontext)  {  try  {  this.Controller.Execute(this.RequestContext);  }  finally  {  this.ControllerFactory.ReleaseController(this.Controller);  }  }  }

而對于異步Action,我之前一直思考著怎么將框架的默認(rèn)實現(xiàn),也就是單個方法調(diào)用,轉(zhuǎn)化成兩個方法(BeginXxx/EndXxx)調(diào)用。曾經(jīng)我想過自己實現(xiàn)一個新的ActionInvoker,但是這就涉及到了大量的工作,尤其是如果希望保持ASP.NET MVC框架現(xiàn)有的功能(ActionFilter,ActionSelector等等),最省力的方法可能就是繼承ControllerActionInvoker,并設(shè)法使用框架已經(jīng)實現(xiàn)的各種輔助方法。但是在分析了框架代碼之后我發(fā)現(xiàn)復(fù)用也非常困難,舉例來說,ControllerActionInvoker判定一個方法為Action的依據(jù)之一是這個方法返回的是ActionResult類型或其子類,這意味著我無法直接使用這個方法來獲取一個返回IAsyncResult的BeginXxx方法;同理,對于查找EndXxx方法,我可能需要在請求名為Abc的異步Action時,將EndAbc作為查找依據(jù)交由現(xiàn)成的方法來查詢——但是,如果又有一個請求是直接針對一個名為EndAbc的同步Action的那又怎么辦呢?

由于這些問題存在,我在去年設(shè)法實現(xiàn)異步Action時幾乎重寫了整個ActionInvoker ——其復(fù)雜程度可見一斑。而且那個實現(xiàn)對于一些特殊情況的處理依舊不甚友好,需要開發(fā)人員在一定程度上做出妥協(xié)。這個實現(xiàn)在TechED 2008 China的Session中公布時我就承認(rèn)它并不能讓我滿意,建議大家不要將其投入生產(chǎn)環(huán)境中。而現(xiàn)在的實現(xiàn),則非常順利地解決了整個問題。雖然從理論上講還不夠“***”,雖然還做出了一些讓步。

帶來如此多問題的原因就在于我們在設(shè)法顛覆框架內(nèi)部的關(guān)鍵性設(shè)計,也就是從單一的Action方法調(diào)用,轉(zhuǎn)變?yōu)椤胺螦PM的”二段式調(diào)用。等等,您是否感覺到了解決問題的關(guān)鍵?沒錯,那就是“符合APM的”。APM要求我們將一個行為分為BeginXxx和EndXxx兩個方法,可是既然ASP.NET MVC框架只能讓我們返回一個ActionResult對象……那么我們?yōu)槭裁床辉谶@個對象里包含方法的引用——也就是一個委托對象呢?這雖然不符合正統(tǒng)的APM簽名,但是完全可行,不是嗎?

publicclassAsyncActionResult:ActionResult  {  publicAsyncActionResult(  IAsyncResultasyncResult,  FuncendDelegate)  {  this.AsyncResult=asyncResult;  this.EndDelegate=endDelegate;  }   publicIAsyncResultAsyncResult{get;privateset;}   publicFuncEndDelegate{get;privateset;}   publicoverridevoidExecuteResult(ControllerContextcontext)  {  context.Controller  .SetAsyncResult(this.AsyncResult)  .SetAsyncEndDelegate(this.EndDelegate);  }  }

“ASP.NET MVC框架的ActionInvoker是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


分享標(biāo)題:ASP.NETMVC框架的ActionInvoker是什么
文章源于:http://weahome.cn/article/jscish.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部