持久功能v2.0中未注入ILogger

时间:2019-11-07 15:47:26

标签: c# logging dependency-injection azure-functions azure-durable-functions

此刻,我正在尝试向Azure持久函数添加ILoggerILogger<>,以便在活动函数中使用日志记录。

登录业务流程功能可以正常工作,并且可以在方法本身中进行注入,但是尝试ILogger进行构造函数注入总是会导致Null异常。

builder.Services.AddLogging();

以上内容在添加到启动文件(Bootstrapper)中时似乎不起作用,并且变体形式也不行:

builder.Services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));

有人解决了吗?

1 个答案:

答案 0 :(得分:1)

从启动文件中删除以下任一行:

builder.Services.AddLogging();
builder.Services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));

然后,无论您在何处注入ILogger,请使用type添加记录器正在注入的ILogger<T>,即:

public class Function1
{
    private readonly ILogger _logger;

    public Function1(ILogger<Function1> logger)
    {
        _logger = logger;
    }

    [FunctionName("Function1")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req)
    {
        _logger.LogInformation("C# HTTP trigger function processed a request.");

        string name = req.Query["name"];

        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

        return name != null
            ? (ActionResult)new OkObjectResult($"Hello, {name}")
            : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
    }
}