winforms 如何在.NET 4.8中使用IHttpClientFactory而不使用.NET Core/Standard中的DI

f8rj6qna  于 2023-04-21  发布在  .NET
关注(0)|答案(1)|浏览(186)

我有一个.NET 4.8 windows窗体应用程序,它使用Autofac进行DI。目前,我们使用的是一个注册为单例的HttpClient示例:

builder.Register(c => {
         var handler = c.Resolve<HttpClientHandler>();
         var bearerHandler = new BearerAuthenticationDelegatingHandler( c.Resolve<AuthenticationManager>(), handler);
         var client = new HttpClient(bearerHandler) {                                                                                            
             BaseAddress = new Uri(baseUrl)
         };
         client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
         return client;
})
.AsSelf()
.SingleInstance();

AuthenticationManager负责管理注入到Web请求(BearerAuthenticationDelegatingHandler)中的访问令牌。
尽管我没有受到DNS问题的影响,但我想遵循MS HttpClient的建议,并想将IHttpClientFactory添加到我的应用程序中。然而,如果不向.NET 7项目中通常使用的依赖注入库添加依赖项,似乎就没有办法做到这一点(例如,这里找到了这种方法的example)。
那么,有没有什么方法可以在.NET 4.8项目中使用IHttpClientFactory,而不必依赖DI扩展库呢?
谢谢。

ca1c2owp

ca1c2owp1#

那么,有没有什么方法可以在. NET 4.8项目中使用IHttpClientFactory而不必依赖DI扩展库呢?
不,这是不可能的。HttpClientFactory与MS DI基础设施紧密集成。这意味着,为了使用它,您将陷入痛苦的境地,以下包将被拉入您的. NET 4.8应用程序中:

  • Microsoft.Bcl.AsyncInterfaces
  • Microsoft.Extensions.DependencyInjection
  • Microsoft.Extensions.DependencyInjection.Abstractions
  • Microsoft.Extensions.Logging
  • Microsoft.Extensions.Logging.Abstractions
  • Microsoft.Extensions.Options
  • Microsoft.Extensions.Primitives
  • System.Buffers
  • System.Diagnostics.DiagnosticSource
  • System.Numeric.Vectors
  • System.Memory
  • System.Runtime.CompilerServices.Unsafe
  • System.Threading.Tasks.Extensions
  • System.ValueTuple

Here is a related answer,它展示了如何在DI的上下文之外使用HttpClientFactory。您会发现在您的案例中集成它将类似于该方法。
我认为对DI基础设施的硬依赖是包含HttpClientFactory的包中的一个设计缺陷。

相关问题