如何将 IHttpClientFactory 添加到 NInject in ASP.NET

How to add IHttpClientFactory to NInject in ASP.NET

我正在尝试在我的 C# ASP.NET Web Forms 应用程序中将 IHttpClientFactory 添加到 NInject 以便我可以在服务。网上有很多关于使用 IHttpClientFactory(而不是创建大量 HttpClient 实例)的文档,但是:

  1. Documentation/Examples 基于与 .NET Core 的接口,我正在使用 ASP.NET(即 .NET Framework),例如https://docs.microsoft.com/en-us/dotnet/architecture/microservices/implement-resilient-applications/use-httpclientfactory-to-implement-resilient-http-requests, https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-3.0
  2. 文档倾向于使用 Microsoft 自己的依赖注入系统而不是 NInject。
  3. 来连接 IHttpClientFactory

那么,我尝试了什么?好吧,我真的不知道从哪里开始,因为虽然 IHttpClientFactorySystem.Net.Http 命名空间中定义得很好,但没有公开的具体实现可以绑定它。我想这样写:

public class ClassLibNinjectModule : NinjectModule
{
    public override void Load()
    {
        Bind<System.Net.Http.IHttpClientFactory>().ToConstant<System.Net.Http.HttpClientFactory>();
    }
}

但是:

  1. System.Net.Http.HttpClientFactory 是静态类型,它没有实现 System.Net.Http.IHttpClientFactory(不同的方法:CreateClient() vs Create()
  2. 我似乎不知道如何将服务绑定到静态提供程序。

谁能告诉我哪里出错了?谢谢。

安装 nuget 包:

Microsoft.Extensions.Http
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Hosting

接下来添加到您的global.asax.cs:

using Microsoft.Extensions.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace....
....
public static IServiceProvider ServiceProvider;

void Application_Start(object sender, EventArgs e)
{
  var hostBuilder = new HostBuilder();
  hostBuilder.ConfigureServices(ConfigureServices);
  var host = hostBuilder.Build();

  ServiceProvider = host.Services;
}

void ConfigureServices(IServiceCollection services)
{
   services.AddHttpClient(); //extension method that add IHttpClientFactories
   *inject services here*
}