C# Azure函数中具有依赖项注入的HttpClient

C# Azure函数中具有依赖项注入的HttpClient,c#,.net-core,azure-functions,C#,.net Core,Azure Functions,表示使用builder.Services.AddHttpClient进行注册 HttpClient,但是我可以在没有这个的情况下解析HttpClient 我有一家小公司,只注册MyService: public class Startup : FunctionsStartup { public override void Configure(IFunctionsHostBuilder builder) { builder.Services.AddTransient

表示使用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吗?这不是多余的吗?
你说得对。您首先需要向it注册服务:

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资源进行开箱即用的管理

你说得对。您首先需要向it注册服务:

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资源进行开箱即用的管理

对你有用吗?你需要进一步的帮助吗?对你有用吗?你需要进一步的帮助吗?