iT邦幫忙

2022 iThome 鐵人賽

DAY 6
1
自我挑戰組

[Dot Net Core](圖解系列與常用套件)系列 第 6

[Dot Net Core](圖解系列) 6. MiddleWare – UseEndpoint to Map Controller Cont.

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20220906/20144614F1b8MjPLpn.jpg

前一節有稍微描述ControllerActionEndpointDataSource中的DefaultActionDescriptorCollectionProvider處理了那些事情。

這節會追蹤主要的執行流程。如下圖:

https://ithelp.ithome.com.tw/upload/images/20220906/20144614XLtT7J49K6.jpg

DefaultActionDescriptorCollectionProvider 類別中的屬性_actionDescriptorProvider,執行 ControllerActionDescriptorProvider.OnProvidersExecuting,進而執行GetDescriptors函式。

https://ithelp.ithome.com.tw/upload/images/20220906/2014461467XaYPXsPI.jpg

由S3-1步驟找到 GetDescriptors 函式,會先透過 GetControllerTypes 新增 ControllerFeature 類別,接著S3-2步驟,透過 IOC機制取得 ApplicationPartManager 。透過之前的HostBuilder做 CreateProvider時,就已經被Resolve過,為Singleten,所以它的 FeatureProvider有存在一個ControllerFeatureProvider;另一個屬性為 ApplicationParts 亦為同時存在,並已存放專案的Assembly資訊。

步驟S3-3,呼叫 ContollerFeatureProvider.PopulateFeature 將 Controller Type 資訊包裝到 ControllerFeature 類別中,步驟S3-4 將此類別傳送到 ApplicationModelFactory.CreateApplicationModel,其會以四種applicationModelProvider來擷取 controller 進一步的資訊。

步驟S3-5會把 Controller Type 會以 ApplicationModelProviderContext 的物件方式傳到 DefaultApplicationModelProvider.OnProviderExcuting 中,擷取如Actions、Attributes、Filters、ControllerProperties等初步資訊,步驟S3-6再以 ControllerModel 類別的 type 指派到 ApplicationModelProviderContext.Result 中。

https://ithelp.ithome.com.tw/upload/images/20220906/20144614jy5u3ASMwW.jpg

步驟S3-7會再將更詳細的資訊做整理,最後將ApplicationModelProviderContext.Results 指派到ControllerActionEndpointDataSource._actions。

https://ithelp.ithome.com.tw/upload/images/20220906/20144614NK5x2aEDqr.jpg

上圖步驟 S4 ,為這整個 UseEndpoints 的最後步驟,將會執行 EndpointMiddleware 這個 middleware 類別的 Invoke部分。

開發者所導入的 middleware 會怎麼進行,請看下一節的說明。


上一篇
[Dot Net Core](圖解系列) 5. MiddleWare –UseEndpoint to Map Controller
下一篇
[Dot Net Core](圖解系列) 7. MiddleWare –How to work in .NET Core
系列文
[Dot Net Core](圖解系列與常用套件)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言