iT邦幫忙

2022 iThome 鐵人賽

DAY 13
1
自我挑戰組

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

[Dot Net Core] (圖解系列) 13.闡述ApplicationPartManager 為何在被Resolve的時候就包含 Controller 的組件資訊

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20220913/20144614p1sRFKaW8H.jpg

上一節我們證明 Singleton Service 被Resolve後,其記憶體是會被保留起來。

這節接續說明,當dot net core 執行 EndPoint Middleware時,要Resolve出 Controller Class 過程中,ApplicationPartManager 為何在被Resolve的時候就包含 Controller 的組件資訊?

回顧 Dot Net Core 運作概述,有一張圖敘述ApplicationPartManager:
https://ithelp.ithome.com.tw/upload/images/20220913/201446141bj9PVj5Er.jpg

如上圖,當HostBuilder 在執行 Build 函式時,到第五大步驟CreateServiceProvide,會在Startup Class的 ConfigureServices 中呼叫AddMvcCore 函式,這個時間點會對ApplicationPartManager實體做處理,也就是會從 ServiceCollection的擴充函式GetApplicationPartManager 來取得ApplicationPartManager實體,以ServiceCollection. TryAddSingleton來註冊instance,並將Controller所在的Assembly Information 包裝到 ApplicationPart中,最後放到ApplicationPartManager. ApplicationParts集合中。

之後Dot Net Core 會執行 EndPoint Middleware,也會對ApplicationPartManager做Resolve,於”Comparison of Dot Net Core MVC and Asp.NET MVC-Timing of Controller Factory and Provider Decision”這節有敘述的圖:

https://ithelp.ithome.com.tw/upload/images/20220913/20144614WfxdEWMHZx.jpg

如上,ControllerActionDescriptorProvider在建構子的參數物件被Resolve時,其ApplicationPartManager 也相同被DI機制Resolve出來。因為是Singleton的Service,所以記憶體都是被保留起來的,也就是ApplicationPartManager是在之前就已經註冊好的Singleton實體。之後透過裏頭已經有的組件資訊,將Controller與 Action 資訊萃取出來執行。


上一篇
[Dot Net Core] (圖解系列) 12. 以最簡單方法驗證架構中 Resolved Singleton 特性
下一篇
[Dot Net Core] (圖解系列) 14. List the main Singleton Service during the Host Build
系列文
[Dot Net Core](圖解系列與常用套件)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言