HttpClientBuilderExtensions.AddAsKeyed 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將一個命名 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
參數
- builder
- IHttpClientBuilder
- lifetime
- ServiceLifetime
登記的鑰匙服務壽命。
傳回
一個 IHttpClientBuilder 可以用來設定客戶端的
備註
由 DI 解析為 Keyed 服務的命名客戶端,其行為會類似你所建立 CreateClient(String)的客戶端。 這表示客戶端會在 的HandlerLifetime期間持續重複使用同一HttpMessageHandler實例,並持續使用獨立的處理器的 DI 範圍,而非解析時的範圍。
警告:將客戶端註冊為有 Transient 鑰匙服務,會導致 HttpClient 和 HttpMessageHandler 實例被 DI 捕捉,因為兩者都實作 IDisposable了 。 如果客戶端在同一服務中 Singleton 被多次解析,可能會導致記憶體洩漏。
警告:若發生(1)密 SingletonHttpClient 鑰註冊,或(2)將密鑰 TransientHttpClient 注入 Singleton 服務,或(3)長期執行的應用程式範圍,實 HttpClient 例將被單例或長期執行範圍捕捉,無法參與處理程序輪替,可能導致 DNS 變更遺失。 (這與類型客戶端(Typed Clients)的問題類似,後者被註冊為 Transient 服務。)
若為同名建商呼叫兩次,該鑰匙服務的存續期將更新為最新的使用 ServiceLifetime 值。
若呼叫為已型別客戶端,只有相關的命名客戶端與處理器會被登記為有鍵。 該類型客戶端本身仍會被註冊為暫存服務。
若與 搭配使用 ConfigureHttpClientDefaults(IServiceCollection, Action<IHttpClientBuilder>),則會使用金鑰 AnyKey ,因此任何命名 HttpClient 實例皆可解析為有鍵服務(除非透過 RemoveAsKeyed(IHttpClientBuilder)明確退出鍵準註冊)。