.NET 7 Program.cs中如何解析服务(替代.NET 6 Startup.cs方式)
在.NET 7 Program.cs中实现服务解析并调用DbSeeder.Seed()
在.NET 7的顶级语句模式下,你可以按照以下步骤实现和原Startup.cs中相同的功能:
确保DbSeeder已注册到服务容器
先在Program.cs中完成DbSeeder的服务注册,和原Startup.cs的ConfigureServices里的注册逻辑一致,示例如下:var builder = WebApplication.CreateBuilder(args); // 根据实际需求选择生命周期(Transient/Scoped/Singleton)注册DbSeeder builder.Services.AddTransient<DbSeeder>(); // 其他服务注册逻辑...构建WebApplication后解析服务并调用Seed
当WebApplication构建完成后,通过其Services属性获取服务提供器,解析DbSeeder实例并执行初始化:var app = builder.Build(); // 解析DbSeeder并执行数据初始化 using var scope = app.Services.CreateScope(); var dbSeeder = scope.ServiceProvider.GetRequiredService<DbSeeder>(); dbSeeder.Seed(); // 后续中间件配置... app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
补充说明
- 使用
CreateScope()是为了适配Scoped生命周期服务的解析规范,如果你的DbSeeder是Transient或Singleton类型,也可以直接调用app.Services.GetRequiredService<DbSeeder>(),但推荐用作用域统一处理,避免潜在的生命周期问题。 - 该写法和原Startup.cs中Configure方法依赖注入的效果完全一致,都是从已注册的服务容器中解析DbSeeder实例并执行初始化逻辑。
内容的提问来源于stack exchange,提问作者buga
相关产品推荐
相关产品推荐

