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

.NET 6中Program类如何调用接口?

在.NET 6 Program类中实现ILogger的依赖注入

在.NET 6的顶级语句模式下,没有单独的Startup类,要获取ILogger实例有两种常用方式:

方式一:构建WebApplication后直接从服务容器获取

当你完成WebApplicationBuilder的配置并构建出WebApplication实例后,可以直接从其服务容器中解析ILogger:

var builder = WebApplication.CreateBuilder(args);

// 添加其他服务配置,比如控制器、Razor页面等
builder.Services.AddControllers();

var app = builder.Build();

// 从服务容器获取ILogger实例
var logger = app.Services.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Program类中成功获取Logger");

// 后续中间件配置
app.MapControllers();

app.Run();

方式二:在配置服务阶段临时获取Logger(适合启动过程提前用日志的场景)

如果需要在构建WebApplication之前就使用Logger(比如配置服务时输出日志),可以临时构建服务容器来获取:

var builder = WebApplication.CreateBuilder(args);

// 临时构建服务容器获取Logger
var tempServiceProvider = builder.Services.BuildServiceProvider();
var logger = tempServiceProvider.GetRequiredService<ILogger<Program>>();
logger.LogInformation("在配置服务阶段获取Logger");

// 临时服务容器用完及时释放,避免资源泄漏
tempServiceProvider.Dispose();

// 继续配置其他服务
builder.Services.AddControllers();

var app = builder.Build();

app.MapControllers();
app.Run();

关于直接var logger = ILogger报错的原因

ILogger是接口类型,不能直接作为变量赋值,必须从依赖注入容器中解析出它的具体实现类实例。这和.NET 3.x中构造函数注入的本质一致——都是从服务容器获取实例,只是.NET 6顶级语句模式下写法不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:33:23