我們一致在說 ASP.NET Core廣泛地使用到了依賴注入,通過前面兩個系列的介紹,相信讀者朋友已經(jīng)體會到了這一點。由于前面兩章已經(jīng)涵蓋了依賴注入在管道構建過程中以及管道在處理請求過程的應用,但是內(nèi)容相對分散和零碎,我們有必要針對這個主題作一個歸納性的介紹。采用依賴注入的服務均由某個ServiceProvider來提供,但是在ASP.NET Core管道涉及到兩個不同的ServiceProvider,其中一個是在管道成功構建后創(chuàng)建并綁定到WebHost上的ServiceProvider,對應著WebHost的Services屬性。另一個ServiceProvider則是在管道處理每個請求時即時創(chuàng)建的,它綁定當表示當前請求上下文上,對應著HttpContext的RequestServices屬性,兩個ServiceProvider之間存在著父子關系。[本文已經(jīng)同步到《ASP.NET Core框架揭秘》之中]
目錄
一、WebHost的ServiceProvider
二、HttpContext的ServiceProvider
原理分析
實例證明
兩個ServiceProvider具有“父子”關系
ServiceProvidersFeature特性
RequestServicesContainerMiddleware中間件
AutoRequestServicesStartupFilter
一、WebHost的ServiceProvider
ASP.NET Core的依賴注入框架其實很簡單,其中僅僅涉及ServiceCollection和ServiceProvider這兩個核心對象。我們預先將服務描述信息注冊到ServiceCollection之上,然后利用ServiceCollection來創(chuàng)建ServiceProvider,并最終利用后者根據(jù)指定的服務類型來提供對應的服務實例。接下來我們以這兩個對象作為唯一的關注點來回顧一下管道的創(chuàng)建流程。ASP.NET Core管道的創(chuàng)建也僅僅涉及到兩個核心對象,作為應用宿主的WebHost對象和創(chuàng)建它的WebHostBuilder。下圖基本揭示了WebHostBuilder創(chuàng)建WebHost,以及WebHost在開啟過程針對依賴注入這兩個核心對象的使用。
ASP.NET Core管道在構建過程中會使用同一個ServiceCollection,所有注冊的服務都被添加到這個對象上。這個ServiceCollection對象最初由WebHostBuilder創(chuàng)建。在WebHost的創(chuàng)建過程中,WebHostBuilder需要向這個ServiceCollection對象注冊兩種類型的服務:一種是確保管道能夠被成功構建并順利處理請求所必需的服務,我們不妨將它們稱為系統(tǒng)服務;另一種則是用戶通過調(diào)用ConfigureServices方法自行注冊的服務,我們姑且稱它們?yōu)?span>用戶服務。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數(shù)據(jù)結構來看看(二) 2017-07-26