如何同时使用 IHttpClientFactory 和 Typed HttpClient?
How to use both IHttpClientFactory and Typed HttpClient?
我有一个类型化的 HttpClient 和(比方说)另一个使用 IHttpClientFactory 获取 HttpClient 实例的 service/class。
为了注册 IHttpClientFactory,我将其注入 services.AddHttpClient()
。为了注册类型化的客户端,我使用 services.AddHttpClient<MyTypedClient>
我的问题是,如果我同时使用这两个用例,你认为会有问题吗?对 HttpMessageHandler 池有影响吗?
谢谢,
杰姆.
简单地说,没有。你可以使用任何你想要的。 IHttpClientFactory
处理 HttpMessageHandler
个实例的集合。当你注入一个类型化的客户端时,实际发生的是 IHttpClientFactory
被调用,新的 HttpClient
实例被创建,它的处理程序被设置为一个已经创建的 HttpMessageHandler
实例或者一个新实例。
换句话说,它主要是语法糖。 IHttpClientFactory
在任何一种情况下都会被调用,它总是创建一个新的 HttpClient
实例,根据名称将处理程序设置为正在跟踪的处理程序。 "typed" 客户端实际上只是一个 "named" 客户端,以类型作为名称,所有客户端都有效 "named" 因为它们都存储在 ConcurrentDictionary
中,其中名字是关键。
我有一个类型化的 HttpClient 和(比方说)另一个使用 IHttpClientFactory 获取 HttpClient 实例的 service/class。
为了注册 IHttpClientFactory,我将其注入 services.AddHttpClient()
。为了注册类型化的客户端,我使用 services.AddHttpClient<MyTypedClient>
我的问题是,如果我同时使用这两个用例,你认为会有问题吗?对 HttpMessageHandler 池有影响吗?
谢谢, 杰姆.
简单地说,没有。你可以使用任何你想要的。 IHttpClientFactory
处理 HttpMessageHandler
个实例的集合。当你注入一个类型化的客户端时,实际发生的是 IHttpClientFactory
被调用,新的 HttpClient
实例被创建,它的处理程序被设置为一个已经创建的 HttpMessageHandler
实例或者一个新实例。
换句话说,它主要是语法糖。 IHttpClientFactory
在任何一种情况下都会被调用,它总是创建一个新的 HttpClient
实例,根据名称将处理程序设置为正在跟踪的处理程序。 "typed" 客户端实际上只是一个 "named" 客户端,以类型作为名称,所有客户端都有效 "named" 因为它们都存储在 ConcurrentDictionary
中,其中名字是关键。