内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

ASP.NETMVC描述類型(二)

ASP.NET MVC描述類型(二)

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),城步網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:城步等地區(qū)。城步做網(wǎng)站價(jià)格咨詢:028-86922220


前言

上個(gè)篇幅中說到ControllerDescriptor類型的由來過程,對于ControllerDescriptor類型來言ActionDescriptor類型的生成則簡單的多了,本章的主題有兩個(gè),第一是說明ActionDescriptor類型的生成過程,第二是描述ActionDescriptor類型的重要性,在哪里體現(xiàn)它的重要性呢?對于前面篇幅的學(xué)習(xí)忽略了最后控制器方法的執(zhí)行過程,而在這個(gè)執(zhí)行過程中ActionDescriptor類型起到了至關(guān)重要的作用,來看下文吧。

 

ActionDescriptor類型的生成

這里我又要采用老手段了(“盜”圖),從前面的篇幅中拉過來示意圖,快速的說明ActionDescriptor類型的生成過程。

圖1

ASP.NET MVC 描述類型(二)

在ReflectedControllerDescriptor類型生成后,流程會回到MVC框架中,并且由之調(diào)用ControllerActionInvoker類型下的FindAction()方法,在FindAction()【是ControllerActionInvoker類型中的方法】的參數(shù)中,第一個(gè)參數(shù)類型是控制器上下文類型,第二個(gè)則是我們在上篇中講解生成的ReflectedControllerDescriptor類型【ControllerDescriptor類型】,第三個(gè)則是控制器方法的名稱,第一個(gè)參數(shù)的暫且不管,在FindAction()方法中是會使用第二個(gè)ReflectedControllerDescriptor類型的參數(shù)中的FindAction()方法【圖中所示的FindAction()方法】,并且參數(shù)是引用上層的FindAction()方法傳遞下來的,然后通過ReflectedControllerDescriptor類型中的ActionMethodSelector類型變量生成一個(gè)MethodInfo類型的變量,用于實(shí)例化ReflectedActionDescriptor類型。

我們看下ReflectedActionDescriptor類型的定義,示例代碼1-1

代碼1-1

public class ReflectedActionDescriptor : ActionDescriptor
    {
        publicReflectedActionDescriptor(MethodInfomethodInfo, string actionName, ControllerDescriptor controllerDescriptor);
        public override stringActionName { get; }
        public override ControllerDescriptorControllerDescriptor { get; }
        //
        // 摘要:
        //     獲取或設(shè)置操作-方法信息。
        //
        // 返回結(jié)果:
        //     操作-方法信息。
        public MethodInfo MethodInfo { get;}
        public override stringUniqueId { get; }
 
        // 摘要:
        //     使用指定的操作-方法參數(shù)來執(zhí)行指定的控制器上下文。
        //
        // 參數(shù):
        //   controllerContext:
        //     控制器上下文。
        //
        //   parameters:
        //     參數(shù)。
        //
        // 返回結(jié)果:
        //     操作返回值。
        //
        // 異常:
        //   System.ArgumentNullException:
        //     parameters 或 controllerContext 參數(shù)為 null。
        public override objectExecute(ControllerContext controllerContext,IDictionary<string,object> parameters);
        public override object[]GetCustomAttributes(bool inherit);
        public override object[]GetCustomAttributes(Type attributeType, bool inherit);
        public override ParameterDescriptor[]GetParameters();
        public override ICollection<ActionSelector> GetSelectors();
        public override boolIsDefined(Type attributeType, bool inherit);
    }

在代碼1-1中,我保留了兩個(gè)注釋一個(gè)是MethodInfo屬性的,還有一個(gè)就是Execute()方法的,因?yàn)檫@一個(gè)屬性一個(gè)方法在下面重要性小節(jié)中會有敘述到。

 

ActionDescriptor類型的重要性

想必看過前面篇幅的朋友都知道,在ASP.NET MVC 過濾器(三)篇幅中我們講解到了行為過濾器的在MVC框架中的具體生成執(zhí)行過程,然后在那個(gè)篇幅中因?yàn)橹黝}不符的原因,我們忽略了Action的執(zhí)行,看下示意圖2

圖2

ASP.NET MVC 描述類型(二)

對于這幅示意圖有什么不明白的朋友可以去看博主所寫的ASP.NET MVC 過濾器(三)篇幅,而對于本篇而言為了說明ActionDescriptor類型的重要性就需要講到Action的執(zhí)行過程,上面的圖我們只需要關(guān)注圖3的部分。

圖3

ASP.NET MVC 描述類型(二)

對于Action執(zhí)行過程的入口是在ControllerActionInvoker類型的InvokeActionMethod()方法之中,看到圖3中的方法參數(shù)就明白了ActionDescriptor類型的重要性了。它是必須的,來看下圖4.

圖4

ASP.NET MVC 描述類型(二)

ActionDescriptor類型是抽象的,在上個(gè)小節(jié)中也有看到定義,MVC框架默認(rèn)生成就是ReflectedActionDescriptor類型,在圖4中可以看到,MVC框架一開始就會調(diào)用ActionDescriptor類型的Execute()方法,只不過這里是由實(shí)現(xiàn)類型ReflectedActionDescriptor類型替代了,然后會接著調(diào)用ActionDescriptor類型中的ActionMethodDispatcherCache類型的的變量的GetDispatcher()方法,然后會由ActionMethodDispatcher類型中定義的為GetExecutor()方法,這個(gè)方法內(nèi)部實(shí)現(xiàn)就是拆解的MethodInfo信息,并且返回的是ActionExecutor委托類型,最終由ActionMethodDispatcher

類型的Execute()方法【實(shí)際執(zhí)行的是ActionExecutor委托】執(zhí)行最后的Action,并且返回一個(gè)值,然后通過ControllerActionInvoker類型中的CreateActionResult()引用剛剛Action執(zhí)行后的值生成ActionResult類型的實(shí)例,最后在InvokeActionResult()方法的實(shí)現(xiàn)中,MVC框架會調(diào)用ActionResult類型的實(shí)例ExecuteResult()方法來通往View引擎。

文章名稱:ASP.NETMVC描述類型(二)
轉(zhuǎn)載源于:http://www.rwnh.cn/article30/ghdpso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站營銷、靜態(tài)網(wǎng)站App設(shè)計(jì)、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
万全县| 商水县| 遵义市| 新闻| 邹平县| 石渠县| 贵德县| 化州市| 天水市| 图片| 玛沁县| 海安县| 安宁市| 金乡县| 石门县| 岑溪市| 湛江市| 行唐县| 大余县| 金堂县| 高邑县| 金山区| 安新县| 娄底市| 元氏县| 牙克石市| 泌阳县| 涞水县| 青海省| 吴旗县| 温州市| 西峡县| 康平县| 芮城县| 林甸县| 石城县| 遂溪县| 昭平县| 南华县| 隆林| 松江区|