選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
1 分鐘閱讀時間 (179 個字)

[Dot Net Core](Graphic series )5. MiddleWare — UseEndpoint to Map Controller Cont.

netcorelogo

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

這節會追蹤主要的執行流程。

首先看到下圖: 

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

由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 中。

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

上圖步驟 S4 ,為這整個 UseEndpoints 的最後步驟,將會執行 EndpointMiddleware 這個 middleware 類別的 Invoke部分。 詳細 middleware 會怎麼進行,請看下一節的說明。

[Dot Net Core](Graphic series )6. MiddleWare –How ...
[Dot Net Core](Graphic series )4. MiddleWare — Use...
 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/05/08, 週三

Captcha 圖像