我有一些服务最初设计为从我的ASP.NET Core 2.1 web应用程序调用。它们使用Microsoft.Extensions.DependencyInjection包将依赖项注入到构造函数中。其中一些具有ILogger记录器的依赖项。
public GroupService(ILogger<GroupService> logger)
{
...
}
我正在函数中构建一个服务提供商,以便它们仍然可以按预期工作,但我想知道我应该如何处理记录器依赖关系。Azure Function(V2)默认情况下会向其中注入一个ILogger,但不能在DI容器中使用该ILogger来创建服务所需的其他记录器。
是否有一个LoggerFactory注册在某个"隐蔽"的地方,我可以访问它以在我的DI容器中使用?我认为这将允许我添加额外的日志记录到函数输出窗口,还是我完全误解了登录函数的工作方式?
我只需要设置一个新的LoggerFactory并将其记录到函数项目使用的ApplicationInsights实例吗?
使用最新的Azure Function运行时,您现在可以让运行时通过构造函数注入您的依赖项。
现在,您可以从Azure函数中删除静态关键字并拥有运行时。
以下是如何设置:
[assembly: WebJobsStartup(typeof(StartUp))]
public class StartUp : IWebJobsStartup
{
public void Configure(IWebJobsBuilder webJobsBuilder)
{
// Enables logging and sets the minimum level of logs.
webJobsBuilder.Services.AddLogging(loggingBuilder =>
{
loggingBuilder.SetMinimumLevel(LogLevel.Debug);
});
// Registers your services.
webJobsBuilder.Services.AddTransient<IGroupService, GroupService>();
}
}