gpt4 book ai didi

c# - 如何将多个 HttpClient 参数传递/注入(inject)到类型化的 HttpClientClass?

转载 作者:行者123 更新时间:2023-12-03 22:09:38 27 4
gpt4 key购买 nike

我想在这里注册一个键入的 HttpClient Microsoft docs .
基本上,该方法应该是

服务.AddHttpClient();

通常这些类的模式只接收 HttpClient 类作为参数,并且您实现调用端点的逻辑。就我而言,我需要在 MyHttpClient 中使用 2 个 HttpClient,一个用于 ping 端点,另一个与 IdentityProvider 对话以发现 refreshEndpoints 以刷新我的 cookie。

public class MyHttpClient : IMyHttpClient
{
public MyHttpClient (HttpClient httpClient,
HttpClient refreshHttpClient)
{
}
}

如果我试图从 Controller 解析 IMyHttpClient,我会收到一条错误消息,指出它无法解析 HttpClient。

在第 43 行的 GitHub 代码中 AddHttpClient你可以看到它正在调用
DefaultTypedHttpClientFactory。
如果你去执行 DefaultTypedHttpClientFactory implementation你会注意到这是一个泛型类型。当它调用 CreateClient 时,它只在第 39 行将一个参数传递给构造函数。

我在这里看到的唯一解决方法是不创建类型化客户端并注册一个接收 IHttpClientFactory 的普通类,并动态创建和配置我的客户端,而不是类型化。
还有什么想法吗?

最佳答案

你不能。你要么需要注入(inject)另一个服务层,要么IHttpClientFactory直接地

另服务

public class MyRefreshClient
{
private readonly HttpClient _httpClient;

public MyRefreshClient(HttpClient httpClient)
{
_httpClient = httpClient;
}

...
}

public class MyHttpClient : IMyHttpClient
{
private readonly HttpClient _httpClient;
private readonly MyRefreshClient _refreshClient;

public MyHttpClient(HttpClient httpClient, MyRefreshClient refreshClient)
{
_httpClient = httpClient;
_refreshClient = refreshClient;
}
}

然后:
services.AddHttpClient<MyRefreshClient>(c => { ... });
services.AddHttpClient<MyHttpClient>(c => { ... });

注入(inject) IHttpClientFactory (并使用命名客户端) :
public class MyHttpClient : IMyHttpClient
{
private readonly HttpClient _httpClient;
private readonly HttpClient _refreshClient;

public MyHttpClient(IHttpClientFactory httpClientFactory)
{
_httpClient = httpClientFactory.CreateClient("MyHttpClient");
_refreshClient = httpClientFactory.CreateClient("MyRefreshClient");
}
}

然后:
services.AddHttpClient("MyHttpClient", c => { ... });
services.AddHttpClient("MyRefreshClient", c=> { ... });

关于c# - 如何将多个 HttpClient 参数传递/注入(inject)到类型化的 HttpClientClass?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55341613/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com