Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模型创建方法中EF核心的依赖项注入_C#_Dependency Injection_.net Core_Ef Core 2.2 - Fatal编程技术网

C# 模型创建方法中EF核心的依赖项注入

C# 模型创建方法中EF核心的依赖项注入,c#,dependency-injection,.net-core,ef-core-2.2,C#,Dependency Injection,.net Core,Ef Core 2.2,我想在DbContext的OnModelCreating方法中调用我自己的一些服务。我需要做什么 我可以通过DbContext构造函数注入服务。但它似乎不够有效,因为该方法在应用程序启动时被调用一次,因此我必须充实我的整个DbContext类 public PortalContext(DbContextOptions<PortalContext> options, IPasswordService passwordService) : base(options) { this

我想在
DbContext
OnModelCreating
方法中调用我自己的一些服务。我需要做什么

我可以通过
DbContext
构造函数注入服务。但它似乎不够有效,因为该方法在应用程序启动时被调用一次,因此我必须充实我的整个DbContext类

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");
     }
    );
    ...
}
公共PortalContext(DbContextOptions选项,IPasswordService密码服务):基本(选项) { 这._passwordService=passwordService; } ... 模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder) { ... 实体().HasData( 新用户 { UserName=“admin”, Password=this.\u 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");
     }
    );
    ...
}
公共PortalContext(DbContextOptions选项):基本(选项) { } ... 模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder) { ... var passwordService=GetPasswordService();//如何操作? 实体().HasData( 新用户 { UserName=“admin”, Password=passwordService.EncryptPassword(“passw0rd”); } ); ... } 使用

this.Database.GetService();

它是一种扩展方法,位于Microsoft.EntityFrameworkCore.Infrastructure的命名空间中

this.Database.GetService();

它是一个扩展方法,位于Microsoft.EntityFrameworkCore.Infrastructure命名空间

(不确定)试试这个。Database.GetService()没有这样的方法。它是一个扩展方法,位于Microsoft.EntityFrameworkCore.Infrastructure命名空间中。是的。它起作用了。谢谢@artur。(不确定)试试这个。Database.GetService()没有这样的方法。它是一个扩展方法,位于Microsoft.EntityFrameworkCore.Infrastructure namespace.Yes中。它起作用了。谢谢@artur@Khodaie,您是否已经尝试使用此代码段创建迁移?我认为它会引发异常,因为当ef工具创建
PortalContext
的实例时,您的服务提供商没有注册
IPasswordService
。您应该在
IDesignTimeDbContextFactory
类中注册此服务。@Khodaie,您已经尝试使用此代码段创建迁移了吗?我认为它会引发异常,因为当ef工具创建
PortalContext
实例时,您的服务提供商没有注册
IPasswordService
。您应该在
IDesignTimeDbContextFactory
类中注册此服务。
this.Database.GetService<IPasswordService>();