gpt4 book ai didi

c# - DelegateHandler 的 DI 无法正常工作

转载 作者:行者123 更新时间:2023-12-01 21:57:39 25 4
gpt4 key购买 nike

刚开始使用 HttpFactory,并且非常困惑它的 DI 是如何工作的,例如这一行工作

services.AddHttpClient<IMyClient, MyClient>()
.AddHttpMessageHandler(s => new UserAgentDelegatingHandler());

这不是

services.AddHttpClient<IMyClient, MyClient>()
.AddHttpMessageHandler<UserAgentDelegatingHandler>();

返回

"Message: System.InvalidOperationException : No service for type 'UserAgentDelegatingHandler' has been registered."

同样的情况,下面的代码工作正常

services.AddHttpContextAccessor();
services.AddHttpClient<IMyClient, MyClient>()
.AddHttpMessageHandler(s => new CookieDelegateHandler(s.GetRequiredService<IHttpContextAccessor>()));

但这不是

services.AddHttpContextAccessor();
services.AddHttpClient<IMyClient, MyClient>()
.AddHttpMessageHandler<CookieDelegateHandler>();

我阅读了很多 HttpClientFactory 用法示例,我的 DelegateHandlers 来自这些示例。

我做错了什么?

最佳答案

return "Message: System.InvalidOperationException : No service for type 'UserAgentDelegatingHandler' has been registered."

如该错误所示,您需要注册 UserAgentDelegatingHandler当你使用 .AddHttpMessageHandler<UserAgentDelegatingHandler>() .

检查 AddHttpMessageHandler ,你会发现

The type of the DelegatingHandler. The handler type must be registered as a transient service.

试着改变你的代码

services.AddTransient<UserAgentDelegatingHandler>();
services.AddHttpClient<IMyClient, MyClient>()
.AddHttpMessageHandler<UserAgentDelegatingHandler>();

关于c# - DelegateHandler 的 DI 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55738010/

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