c# - ILogger 未注入(inject) Durable Functions v2.0

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

目前我正在尝试添加 ILoggerILogger<>到 Azure Durable Function,以便在 Activity Functions 中使用日志记录。

登录编排函数工作正常,并注入(inject)方法本身,但尝试为 ILogger 注入(inject)构造函数总是导致空异常。

builder.Services.AddLogging();

当添加到启动文件(Bootstrapper)时,上述内容似乎不起作用,并且以下变体也不起作用:
builder.Services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));

有人解决了这个问题吗?

最佳答案

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

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

然后,无论您在哪里注入(inject) ILogger , 添加 type使用 ILogger<T> 注入(inject)您的记录器IE:
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");
    }
}

关于c# - ILogger 未注入(inject) Durable Functions v2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58752340/

相关文章:

java - 在我的 java 文件中使用 log4j.jar 。

java - 如何获取 server.log 文件中的日志条目以在 jsf 页面上打印出来

c# - protobuf-net 不适合哪些场景?

c# - 将逗号分隔的数据集拆分为单独的数组

c# - 为什么动态 IEnumerable 上的 First() 或 ElementAt() 是可等待的?

c# - 我应该在哪里存储对象集合以方便 DI/测试?

java - Spring依赖注入(inject)不起作用

c# - 从 C# 程序访问 DLL 中的方法

python - 集中式登录

php - Laravel 依赖注入(inject) : When do you have to? 你什么时候可以模拟门面?两种方法的优点?