【问题标题】:HttpClient with dependency injection in Azure function在 Azure 函数中具有依赖注入的 HttpClient
【发布时间】:2020-05-14 15:35:34
【问题描述】:

Documentation 表示使用builder.Services.AddHttpClient() 进行注册 HttpClient,但我可以在没有这个的情况下解析 HttpClient。

我有一个只注册 MyService 的小型初创公司:

public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddTransient<MyService>();
    }
}

在函数中,我想解析 HttpClient 和 MyService 并且此代码有效。

public class Function
{
    public Function(MyService service, HttpClient client)
    {
    }

    [FunctionName("func")]
    public async Task<IActionResult> Update(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]
        HttpRequest request,
        ILogger logger)
    {
        return new OkObjectResult("Hello");
    }
}
  • 谁在哪里注册HttpClient?
  • 我应该使用builder.Services.AddHttpClient()吗?这不是多余的吗?

【问题讨论】:

    标签: c# .net-core azure-functions


    【解决方案1】:

    你是对的。您首先需要将其注册到服务:

    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            //Register HttpClientFactory
            builder.Services.AddHttpClient();
    
            builder.Services.AddTransient<MyService>();
        }
    }
    

    如果您的服务将使用 HttpClientFactory,那么在服务之前进行注册很重要。因此,当 MyService 实例依赖解决时,DI 容器中已经有 HttpCliendFactory 的记录。

    您的 Function.cs 类将是:

    public class Function
    {
        private IHttpClientFactory _httpClientFactory;
        private MyService _myService;
    
    
        public Function(MyService myService, IHttpClientFactory client)
        {
            _myService = myService;
            _httpClientFactory = httpClientFactory;
        }
    
        [FunctionName("func")]
        public async Task<IActionResult> Update(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]
            HttpRequest request,
            ILogger logger)
        {
            //How to use example
            var client = _httpClientFactory.CreateClient();
    
            return new OkObjectResult("Hello");
        }
    }
    

    HttpClient 当然可以在没有客户端工厂的情况下使用,但是如果您从 HttpClientFactory 生成 HttpClient 对象,您将对您的 HttpClient 资源进行更好的开箱即用管理。

    【讨论】:

    • 它对你有用吗?您需要进一步的帮助吗?
    猜你喜欢
    • 2020-03-09
    • 2017-11-07
    • 2023-02-24
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多