EF-core OnModelCreating 方法中的依赖注入
Dependency Injection in EF-core OnModelCreating method
我想在 DbContext
的 OnModelCreating
方法中调用我自己的一些服务。我需要做什么?
我可以通过 DbContext
构造函数注入服务。但它似乎不够有效,因为该方法在应用程序启动时被调用一次,我必须为此增加整个 DbContext class。
public PortalContext(DbContextOptions<PortalContext> options, IPasswordService passwordService) : base(options)
{
this._passwordService = passwordService;
}
...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
...
entity<User>().HasData(
new User
{
UserName = "admin",
Password = this._passwordService.EncryptPassword("passw0rd");
}
);
...
}
上面的代码可以换成下面那个吗:
public PortalContext(DbContextOptions<PortalContext> options) : base(options)
{
}
...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
...
var passwordService = GetPasswordService(); // How?
entity<User>().HasData(
new User
{
UserName = "admin",
Password = passwordService.EncryptPassword("passw0rd");
}
);
...
}
使用
this.Database.GetService<IPasswordService>();
这是一个扩展方法,位于 Microsoft.EntityFrameworkCore.Infrastructure
命名空间
我想在 DbContext
的 OnModelCreating
方法中调用我自己的一些服务。我需要做什么?
我可以通过 DbContext
构造函数注入服务。但它似乎不够有效,因为该方法在应用程序启动时被调用一次,我必须为此增加整个 DbContext class。
public PortalContext(DbContextOptions<PortalContext> options, IPasswordService passwordService) : base(options)
{
this._passwordService = passwordService;
}
...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
...
entity<User>().HasData(
new User
{
UserName = "admin",
Password = this._passwordService.EncryptPassword("passw0rd");
}
);
...
}
上面的代码可以换成下面那个吗:
public PortalContext(DbContextOptions<PortalContext> options) : base(options)
{
}
...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
...
var passwordService = GetPasswordService(); // How?
entity<User>().HasData(
new User
{
UserName = "admin",
Password = passwordService.EncryptPassword("passw0rd");
}
);
...
}
使用
this.Database.GetService<IPasswordService>();
这是一个扩展方法,位于 Microsoft.EntityFrameworkCore.Infrastructure
命名空间