.NET 6 Program.cs中如何调用IDbInitializer完成数据库初始化
错误原因
你遇到的报错有两个核心问题:
DbInitializer类没有实现你定义的IDbInitializer接口,无法正常注入到DI容器中- 没有定义
dbInitializer变量,也没有从依赖注入容器中获取对应的实例,直接调用不存在的变量自然会抛出未赋值错误
修复步骤
- 先修正
DbInitializer.cs的实现,继承IDbInitializer接口,如果需要用到DbContext等依赖,可以直接写入构造函数,DI容器会自动注入:
public class DbInitializer : IDbInitializer { // 示例:如果需要用到你的数据库上下文,取消注释以下代码即可 // private readonly YourDbContext _dbContext; // public DbInitializer(YourDbContext dbContext) // { // _dbContext = dbContext; // } public void Initialize() { // 原有初始化逻辑 } }
- 在
Program.cs的builder.Build()执行前,注册IDbInitializer的服务映射:
// 放在var app = builder.Build();之前的服务注册区域 builder.Services.AddScoped<IDbInitializer, DbInitializer>();
- 把你原来直接调用
dbInitialize.Initialize();的位置替换为以下代码,从DI容器中获取实例后再执行初始化:
app.UseAuthorization(); // 新增代码开始 using (var scope = app.Services.CreateScope()) { var dbInitializer = scope.ServiceProvider.GetRequiredService<IDbInitializer>(); dbInitializer.Initialize(); } // 新增代码结束 app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
修改完成后即可正常执行数据库初始化逻辑。
内容的提问来源于stack exchange,提问作者Kahlouche Omar Djaber
相关产品推荐
相关产品推荐

