【发布时间】:2021-11-02 06:41:55
【问题描述】:
简介
我正在开发 SDK(它只是 REST API 的包装器)。此 SDK 在内部使用 HttpClient 向 API 发出请求。 SDK 面向 .NET Standard 2.1。这是简化的代码。
public class SomeSdk
{
private readonly HttpClient _httpClient;
public SomeSdk(<some-settings>)
{
_httpClient = new HttpClient(<some-settings>);
}
public async Task<string> GetSomethingFromApiAsync()
{
return await _httpClient.GetStringAsync(...);
}
}
问题
该 SDK 正被 ASP.NET Core 项目中的其他开发人员使用。我知道 HttpClient 的问题,并且我知道 MS DOCS 建议注入 HttpClientFactory 以避免 SocketException 并反映 DNS 更改。
想到的第一个解决方案是让用户在SDK构造函数或其他方法中传递HttpClient(即来自HttpClientFactory)。像这样。
public async Task<string> GetSomethingFromApiAsync(HttpClient clientFromFactory)
{
return await clientFromFactory.GetStringAsync(...);
}
但是SDK在使用HttpClient之前会对其进行配置(代理,超时等),因此它的初始化应该留在SDK构造函数中。
问题
我目前的解决方案是在 ASP.NET Core 项目中将 SDK 作为单例注入并接受 DNS 反射问题。我仍然想问是否有人会推荐我解决这个问题的更好方法。
非常感谢你,亚当。
【问题讨论】:
标签: c# .net-core asp.net-core-webapi webapi httpclientfactory