Ole*_*ukh 1 c# .net-core azure-functions
文档说使用 builder.Services.AddHttpClient()HttpClient 进行注册,但我可以在没有这个的情况下解析 HttpClient。
我有一家小型初创公司,只注册 MyService :
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddTransient<MyService>();
}
}
Run Code Online (Sandbox Code Playgroud)
在函数中,我想解析 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");
}
}
Run Code Online (Sandbox Code Playgroud)
builder.Services.AddHttpClient()?这不是多余的吗?你是对的。您首先需要向其注册服务:
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
//Register HttpClientFactory
builder.Services.AddHttpClient();
builder.Services.AddTransient<MyService>();
}
}
Run Code Online (Sandbox Code Playgroud)
如果您的服务将使用 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");
}
}
Run Code Online (Sandbox Code Playgroud)
HttpClient 当然可以在没有客户端工厂的情况下使用,但是如果您从 HttpClientFactory 生成 HttpClient 对象,您将对 HttpClient 资源进行更好的开箱即用管理。
| 归档时间: |
|
| 查看次数: |
6950 次 |
| 最近记录: |