You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6中使用Autofac注册ILogger的正确简便方法

在.NET 6 + Autofac的Azure App Service Worker中正确注入ILogger的方法

问题原因

直接调用GetRequiredService<ILogger>()报错,是因为WebJobs Host默认并未注册无泛型参数的ILogger类型,仅注册了泛型版本的ILogger<T>和ILoggerFactory,容器中找不到对应的服务实例。

三种简便的解决方法

方法1:通过ILoggerFactory创建日志实例(推荐,符合原生日志设计)

无需修改Autofac注册,直接从容器获取ILoggerFactory来创建指定名称的日志器:

var host = builder.Build();
var loggerFactory = host.Services.GetRequiredService<ILoggerFactory>();
var logger = loggerFactory.CreateLogger("Program"); // 可自定义日志类别名称
logger.LogCritical("This is a test");

方法2:注册无泛型ILogger到Autofac容器

在Autofac的容器配置中,手动注册无泛型的ILogger,委托ILoggerFactory创建实例:

builder.ConfigureContainer<ContainerBuilder>(builder => 
{
    builder.RegisterModule(new AutofacModule());
    // 注册无泛型ILogger,指定默认日志类别
    builder.Register(ctx => 
    {
        var factory = ctx.Resolve<ILoggerFactory>();
        return factory.CreateLogger("DefaultLogger");
    }).As<ILogger>().SingleInstance();
});

完成注册后,即可正常调用GetRequiredService<ILogger>()获取实例。

方法3:使用泛型ILogger(最简洁,类内依赖注入首选)

直接获取泛型版本的日志器,这是.NET日志系统的标准用法,容器默认已注册该类型:

var host = builder.Build();
var logger = host.Services.GetRequiredService<ILogger<Program>>();
logger.LogCritical("This is a test");

如果是在业务类中做依赖注入,直接将ILogger<YourClass>声明为构造函数参数即可,Autofac会自动完成解析。

内容的提问来源于stack exchange,提问作者user1044169

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:54:17