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");
}
}
builder.Services.AddHttpClient()
吗?这不是多余的吗?答案 0 :(得分:2)
您是对的。您首先需要向服务注册:
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资源。