日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET Core 3.0之深入源码理解HttpClientFactory(二)

發布時間:2023/12/4 asp.net 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core 3.0之深入源码理解HttpClientFactory(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在前面

上一篇文章討論了通過在ConfigureServices中調用services.AddHttpClient()方法,并基于此進一步探討了DefaultHttpClientFactory是如何創建HttpClient實例和HttpMessageHandler實例的,并了解了DefaultHttpClientFactory內部維護者一個定時器和兩個HttpMessageHandler對象集合,以定期清理無效的 HttpMessageHandler對象,詳細的內容可以點擊鏈接跳轉,接下來我會接著前一篇文章繼續展開相關討論。

詳細介紹

HttpMessageHandlerBuilder

該類是一個抽象類,起到生成器的作用,可用于用于配置HttpMessageHandler實例。HttpMessageHandlerBuilder會在ServiceCollection中被注冊為Transient服務。調用方要為每個要創建的HttpMessageHandler實例檢索一個新實例。實現者應該確保每個實例都只使用一次。

HttpMessageHandlerBuilder里面有三個比較重要的屬性:

這三個屬性意味著每個HttpMessageHandlerBuilder都需要維護自身的HttpMessageHandler實例和管道。

其內部還有一個抽象方法:

當然,內部最核心的方法就是管道的創建過程了,需要傳入主派生類自身的HttpMessageHandler和管道列表對象。它會將primaryHandler實例付給管道列表的第一個Item的InnerHandler,其他對象會依此后移,這也為我們自定義HttpMessageHandler(各種中間件)提供了無限可能。

相關實現如下:

接下來我們看一下HttpMessageHandlerBuilder一個派生類DefaultHttpMessageHandlerBuilder,其構造函數會傳入IServiceProvider實例,我們的自定義操作也可以參照這個類。

關于Build方法的實現如下,比較簡單主要是調用了CreateHandlerPipeline方法:

ITypedHttpClientFactory

這是一個抽象工廠,該組件可以使用給定邏輯名稱的自定義配置創建類型化HttpClient實例,與命名方式創建HttpClient具有相同的的功能。類型化客戶端可能用于單個后端終結點,并封裝此終結點的所有處理邏輯。另一個優勢是它們使用 DI 被注入到應用中需要的位置,下一篇文章會再次討論相關功能。

我們首先看一下調用方式:

可以看出此處的調用與普通的HttpClient沒有什么太大區別,只是增加了一個泛型標記,而且該類型沒有特殊的要求,只要是個類就行。其內部依然調用AddHttpClient(services),但它調用了另一個擴展方法,如下所示:

可以看到最終的代碼調用了ITypedHttpClientFactory的CreateClient方法,Microsoft.Extensions.Http包中有一個默認的ITypedHttpClientFactory派生類,DefaultTypedHttpClientFactory<TClient>,該類提供了了構造函數用于接收IServiceProvider實例,以及一個內部類聲明的緩存對象,該對象十分重要,它被注冊為singleton類型,已達到全局使用,并可以充當相關實例激活時的對象池。它也允許它的外部類注冊為transient,這樣它就不會在應用根服務提供程序上被關掉了。

相關代碼如下:

內部緩存對象:

最后我們看一下源碼中提供的范例:


總結

以上是生活随笔為你收集整理的.NET Core 3.0之深入源码理解HttpClientFactory(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。