HttpClientBuilderExtensions.AddAsKeyed 方法

定義

將一個命名 HttpClient 的處理流程及相關的處理流程 HttpMessageHandler 註冊為有鍵的服務,並以客戶端名稱為鍵,參數中提供 lifetime 壽命。 預設壽命為 Scoped

public static Microsoft.Extensions.DependencyInjection.IHttpClientBuilder AddAsKeyed(this Microsoft.Extensions.DependencyInjection.IHttpClientBuilder builder, Microsoft.Extensions.DependencyInjection.ServiceLifetime lifetime = Microsoft.Extensions.DependencyInjection.ServiceLifetime.Scoped);
static member AddAsKeyed : Microsoft.Extensions.DependencyInjection.IHttpClientBuilder * Microsoft.Extensions.DependencyInjection.ServiceLifetime -> Microsoft.Extensions.DependencyInjection.IHttpClientBuilder
<Extension()>
Public Function AddAsKeyed (builder As IHttpClientBuilder, Optional lifetime As ServiceLifetime = Microsoft.Extensions.DependencyInjection.ServiceLifetime.Scoped) As IHttpClientBuilder

參數

lifetime
ServiceLifetime

登記的鑰匙服務壽命。

傳回

一個 IHttpClientBuilder 可以用來設定客戶端的

備註

由 DI 解析為 Keyed 服務的命名客戶端,其行為會類似你所建立 CreateClient(String)的客戶端。 這表示客戶端會在 的HandlerLifetime期間持續重複使用同一HttpMessageHandler實例,並持續使用獨立的處理器的 DI 範圍,而非解析時的範圍。

警告:將客戶端註冊為有 Transient 鑰匙服務,會導致 HttpClientHttpMessageHandler 實例被 DI 捕捉,因為兩者都實作 IDisposable了 。 如果客戶端在同一服務中 Singleton 被多次解析,可能會導致記憶體洩漏。

警告:若發生(1)密 SingletonHttpClient 鑰註冊,或(2)將密鑰 TransientHttpClient 注入 Singleton 服務,或(3)長期執行的應用程式範圍,實 HttpClient 例將被單例或長期執行範圍捕捉,無法參與處理程序輪替,可能導致 DNS 變更遺失。 (這與類型客戶端(Typed Clients)的問題類似,後者被註冊為 Transient 服務。)

若為同名建商呼叫兩次,該鑰匙服務的存續期將更新為最新的使用 ServiceLifetime 值。

若呼叫為已型別客戶端,只有相關的命名客戶端與處理器會被登記為有鍵。 該類型客戶端本身仍會被註冊為暫存服務。

若與 搭配使用 ConfigureHttpClientDefaults(IServiceCollection, Action<IHttpClientBuilder>),則會使用金鑰 AnyKey ,因此任何命名 HttpClient 實例皆可解析為有鍵服務(除非透過 RemoveAsKeyed(IHttpClientBuilder)明確退出鍵準註冊)。

適用於