C# 在.net core 3.1中的类中使用DbContext

C# 在.net core 3.1中的类中使用DbContext,c#,.net,asp.net-core,C#,.net,Asp.net Core,在尝试使用类中的数据库时,调用类时遇到问题。我的上下文设置也是如此 public class AppDbContext : DbContext { public DbSet<User> Users {get; set;} public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } } 我遇到的问题是,当我尝试使用该类并执行类似于ne

在尝试使用类中的数据库时,调用类时遇到问题。我的上下文设置也是如此

public class AppDbContext : DbContext
{
    public DbSet<User> Users {get; set;}
    public AppDbContext(DbContextOptions<AppDbContext> options)
        : base(options)
    { }
}

我遇到的问题是,当我尝试使用该类并执行类似于
newpasswordmanager()
的操作时,它希望为构造函数中的db发送一个参数。我做错了什么?我不想将数据库作为参数传递,但我需要使用类中的数据库来获取数据。在类中是否应该使用
using
语句?

使用依赖项注入时,必须始终使用依赖项注入。这意味着不直接使用
new
。为了注入依赖项,DI容器必须负责实例化它。如果实例化它,则不会注入任何内容


不管是长是短,您都需要向服务集合注册
PasswordManager
(如果您还没有注册过的话),然后将
PasswordManager
注入到您使用它的任何地方,而不是自己更新它。

您想手动使用该类还是从DI/IoC容器解析它?可以从任何地方调用它。不确定最佳实践是什么如果你有一个带有参数的构造函数的类,如果你想实例化这个类,你必须传递这些参数的参数。。。你不能通过
使用
语句来解决这个问题,为什么你会这样认为?因此,您需要
新的密码管理器(新的AppDbContext())
。但是
AppDbContext
也有一个非默认构造函数,所以
newpasswordmanager(newappdbcontext(newdbcontextoptions())
等等。如果您不想这样做,那么您必须连接依赖项注入,以便它知道
PasswordManager
,并将
PasswordManager
注入到您想要使用它的类中…在控制器中,我在构造函数中有参数,所以我认为它是相同的。我宁愿不通过上下文。有办法吗?“有办法吗?”-是的,这叫做依赖注入。去读书。您只需要在DI框架中注册
PasswordManager
,并将其注入到您想要使用它的控制器的构造函数中。
private AppDbContext db;

public PasswordManager(AppDbContext db)
{
    this.db = db;
}