我正在使用dotnet core开发Azure WebJobs(3.0.6)。我提到了微软的Get Started Guide。根据示例,我希望控制台记录开始。该指南的范围是有限的。在我的应用程序中,我将在不同的dll中使用许多类。我无法弄清楚如何在这些类中添加日志记录。示例代码为
// The main method
static async Task Main()
{
var builder = new HostBuilder();
builder.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
b.AddAzureStorage();
});
builder.ConfigureLogging((context, b) =>
{
b.AddConsole();
});
var host = builder.Build();
using (host)
{
await host.RunAsync();
}
}
//队列触发器类
public class QueueListenerService
{
public static void QueueListener([QueueTrigger("myqueue")] string message, ILogger logger)
{
logger.LogInformation("The logger works here");
// how can I pass an instance of ILogger in the constructor below
MyWorker myWorker = new MyWorker();
}
}
// MyWorker类在另一个程序集中
public class MyWorker
{
public MyWorker(ILogger logger)
{
// I want to use logger here being injected
}
}
我在dotnet核心控制台应用程序中提到了DI的几个示例,它们使用服务收集方法。我还检查了this blog,但对我来说,这是我所做的,但ILogger尚未解决。创建MyWorker实例时,它要求我传递ILogger实例
答案 0 :(得分:1)
您已接近解决方案。您需要更改的主要内容是让服务集合为您创建MyWorker
实例。
我迅速扩展了我最近的Webjob示例项目,以包括带有依赖项注入的控制台日志记录。有关如何添加的信息,请参见this commit。
您主要需要为QueueListenerService
使用构造函数依赖项注入。
builder.ConfigureServices(services =>
{
services.AddScoped<QueueListenerService>();
services.AddScoped<MyWorker>();
});
public class QueueListenerService
{
public QueueListenerService(MyWorker worker){
_Worker = worker;
}
public static void QueueListener([QueueTrigger("myqueue")] string message, ILogger logger)
{
logger.LogInformation("The logger works here");
_Worker.DoStuff()
}
}