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

[Dot Net Core](Graphic series )8. Resolve Controller class process

netcorelogo

上一節概述了由Http Request 到 Dot Net Core MVC 的流程,本節會探討Controller 於 Dot Net Core 被Resolve的大致流程。 首先延續上篇文章,ControllerActionInvoker.InvokeAsync 會執行controller instance 的產生: 

上圖展示ControllerActionInvoker 會收集 ControllerContext、ControllerActionInvokerCacheEntry 的資訊到自己的屬性中,一旦開始執行ControllerActionInvoker.InvokeAsync,會由S1步驟開始,呼叫ControllerActionInvoker.InvokeFilterPipelineAsync,經過S2呼叫Next,到了S3步驟呼叫ControllerActionInvoker.InvokeInnerFilterAsync,此時就會到一個很重要的階段,就是透過 ControllerFactory 去接續產生 Controller instance。

程式碼:

var controller = controllerActivator(controllerContext);

首先會執行ActivatorUtilities執行 GetService 函式。S1步驟會先由ControllerContext.HttpContext.RequestServices 取得 ServiceProviderEngine.CreateScope,執行此函式可以得到ServiceProviderScope。

接著S2步驟透過由ControllerContext取得Controller Type來當參數執行ServiceProviderScope.GetService,至S3步驟到ServiceProviderEngine.GetService,會呼叫 ServiceProvider的 IServiceProviderEngineCallbackOnResolve。

下圖是將整個呼叫的過程LOG下來,當作軌跡:

由上圖執行ControllerActionInvoker.InvokeAsync,會從 Authorization Filter Case,接著 Resource Filter Case、Exception Filter Case、Action Case,到了ActionBegin 開始找到 ControllerFactory 產生 controller instance,再到 ActionFilter Case 來執行 Action Method,最後回傳 ActionResult。 以上是大致上的過程概述,提供參考。

[Dot Net Core](Graphic series)9. Comparison of Dot...
[Dot Net Core](Graphic series )7. Http Request to ...
 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/04/20, 週六

Captcha 圖像