1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      ASP.NETMVC描述類型(一)

      ASP.NET MVC描述類型(一)

      我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、寧洱ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的寧洱網(wǎng)站制作公司

      前言

      在前面的好多篇幅中都有提到過(guò)ControllerDescriptor類型,并且在ASP.NET MVC 過(guò)濾器(一)篇幅中簡(jiǎn)單的描述過(guò),今天我們就來(lái)講一下ControllerDescriptor類型。

       

      ControllerDescriptor類型的由來(lái)

      在ASP.NET MVC 過(guò)濾器(一)篇幅中有過(guò)示意圖,當(dāng)時(shí)說(shuō)明了在生成過(guò)濾器信息對(duì)象集合之前所要做的一些步驟中包含著生成ControllerDescriptor類型,并沒有詳細(xì)的說(shuō)明,我們先來(lái)看一下圖1

      圖1

      ASP.NET MVC 描述類型(一)

      關(guān)于這個(gè)示意圖之前的一些部分我就不細(xì)說(shuō)了,我們就先看一下ControllerDescriptor類型的生成過(guò)程,

      從圖1中可以看出ControllerDescriptor類型的由來(lái)是由ControllerDescriptorCache控制器描述類型緩存類【系統(tǒng)默認(rèn)實(shí)現(xiàn)類】來(lái)生成的,ControllerDescriptorCache類型也是實(shí)現(xiàn)了ReaderWriterCache類型的,這里只要描述一下ReaderWriterCache類型中的實(shí)現(xiàn)就好了,因?yàn)镃ontrollerDescriptorCache也只是調(diào)用了基類的某個(gè)函數(shù)來(lái)實(shí)現(xiàn)生成的功能。來(lái)說(shuō)實(shí)現(xiàn),ReaderWriterCache中有個(gè)鍵值隊(duì)類型的緩存變量【下文中都用緩存一詞代替】,用來(lái)存貯控制器描述類型的,實(shí)現(xiàn)方法的簽名和ControllerDescriptorCache的GetDescriptor()方法一樣,第一個(gè)參數(shù)是會(huì)根據(jù)當(dāng)前ControllerContext中的Controller來(lái)獲取當(dāng)前控制器的類型,第二個(gè)參數(shù)暫且不談稍后講解現(xiàn)在只要把第二個(gè)參數(shù)是當(dāng)成生成ControllerDescriptor類型的外插模塊,在實(shí)現(xiàn)中,首先會(huì)根據(jù)ControllerType去緩存中查找,如果有的話則返回查找到的控制器描述類型,沒有的話,則會(huì)根據(jù)第二個(gè)參數(shù)來(lái)生成控制器描述類型,然后會(huì)先把生成的控制器描述類型設(shè)置到緩存中再返回生成的類型。

      看到這里有的朋友會(huì)問說(shuō)來(lái)說(shuō)去也沒說(shuō)重點(diǎn),ControllerDescriptor類型到底怎么來(lái)的,對(duì)的,重點(diǎn)在于第二個(gè)參數(shù),上面的描述只是讓大家更清晰的認(rèn)識(shí)到Func的重要性。

      看一下系統(tǒng)的默認(rèn)實(shí)現(xiàn)Func的方式: () => newReflectedControllerDescriptor(controllerType),controllerType類型是從當(dāng)前ControllerContext.Controller.GetType()獲取的。

      對(duì)于ReflectedControllerDescriptor類型,在默認(rèn)實(shí)現(xiàn)中都是把它作為ControllerDescriptor類型類使用的。

      這個(gè)時(shí)候我們看一下ControllerDescriptor類型的定義,示例代碼1-1.

      public abstract class ControllerDescriptor: ICustomAttributeProvider,IUniquelyIdentifiable
          {
       
              protectedControllerDescriptor();
       
              // 摘要:
              //     獲取控制器的名稱。
              //
              // 返回結(jié)果:
              //     控制器的名稱。
              public virtual stringControllerName { get; }
              //
              // 摘要:
              //     獲取控制器的類型。
              //
              // 返回結(jié)果:
              //     控制器的類型。
              public abstract TypeControllerType { get; }
              public virtual stringUniqueId { get; }
       
              // 摘要:
              //     使用指定的名稱和控制器上下文來(lái)查找操作方法。
              //
              // 參數(shù):
              //   controllerContext:
              //     控制器上下文。
              //
              //   actionName:
              //     操作的名稱。
              //
              // 返回結(jié)果:
              //     有關(guān)操作方法的信息。
              public abstract ActionDescriptorFindAction(ControllerContextcontrollerContext, string actionName);
              //
              // 摘要:
              //     在控制器中檢索操作-方法描述符的列表。
              //
              // 返回結(jié)果:
              //     控制器中的操作-方法描述符的列表。
              public abstract ActionDescriptor[]GetCanonicalActions();
              public virtual object[]GetCustomAttributes(bool inherit);
              public virtual object[]GetCustomAttributes(Type attributeType, bool inherit);
              public virtual boolIsDefined(Type attributeType, bool inherit);
          }

      在代碼1-1中,大家也都是看到了ControllerDescriptor類型的定義是抽象類型,其中ControllerName屬性表示著當(dāng)前控制器上下文中的控制器名稱,ControllerType屬性是被定義為抽象的了,需要在派生類中的實(shí)現(xiàn)的(ReflectedControllerDescriptor類型),F(xiàn)indAction()也是抽象的,看這個(gè)方法的返回類型就知道了它是做什么用的了,對(duì)于這部分的細(xì)節(jié)都是在默認(rèn)實(shí)現(xiàn)類ReflectedControllerDescriptor類型中表示,來(lái)看ReflectedControllerDescriptor類型的定義,示例代碼1-2

      代碼1-2

      public class ReflectedControllerDescriptor : ControllerDescriptor
          {
              //
              // 參數(shù):
              //   controllerType:
              //     控制器的類型。
              //
              // 異常:
              //   System.ArgumentNullException:
              //     controllerType 參數(shù)為 null。
              publicReflectedControllerDescriptor(TypecontrollerType);
              public override sealed Type ControllerType { get;}
              public override ActionDescriptorFindAction(ControllerContextcontrollerContext, string actionName);
              public override ActionDescriptor[]GetCanonicalActions();
              public override object[]GetCustomAttributes(bool inherit);
              public override object[]GetCustomAttributes(Type attributeType, bool inherit);
              public override boolIsDefined(Type attributeType, bool inherit);
      }

      對(duì)于ReflectedControllerDescriptor類型的具體實(shí)現(xiàn),在這里只是簡(jiǎn)要的說(shuō)明一下,ReflectedControllerDescriptor類型的構(gòu)造函數(shù)參數(shù)為Type類型,這里上面也說(shuō)過(guò)這是Controller類型,在構(gòu)造函數(shù)構(gòu)造的時(shí)候,ReflectedControllerDescriptor類型內(nèi)部還有個(gè)ActionMethodSelector類型的私有變量,ActionMethodSelector類型的構(gòu)造函數(shù)所需參數(shù)也是Type類型。這里為什么要說(shuō)到ActionMethodSelector類型呢?因?yàn)樵赗eflectedControllerDescriptor類型的FindAction()方法的具體實(shí)現(xiàn)中使用的就是ActionMethodSelector類型中的方法。就如圖1所示的那樣。


      當(dāng)前文章:ASP.NETMVC描述類型(一)
      網(wǎng)站鏈接:http://www.ef60e0e.cn/article/gpchoj.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        拉孜县| 阿勒泰市| 巴彦县| 德州市| 武冈市| 凤冈县| 深州市| 宜良县| 临夏市| 维西| 越西县| 彝良县| 建水县| 红河县| 上犹县| 盐池县| 平乐县| 浙江省| 曲阳县| 湟源县| 万宁市| 牟定县| 会宁县| 宣化县| 四平市| 涞源县| 攀枝花市| 米林县| 苍山县| 潞城市| 石城县| 新兴县| 尼勒克县| 吉隆县| 剑阁县| 昭平县| 株洲市| 横山县| 金昌市| 岳池县| 临朐县|