dbContext在单独的类库项目中,带有依赖注入



我目前正在为学校项目创建WebAPI。之前与DI合作,但我似乎无法在当前上下文中使用它。

对于项目,我正在为DAL需要多个项目用于通过DI获取DBContext的层。

dbContext:

public FICTIEContext(DbContextOptions<FICTIEContext> options)
        : base(options)
    {
    }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
        }
    }

启动寄存器:

      public void ConfigureServices(IServiceCollection services)
    {
       services.AddDbContext<FICTIEContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Database")));
    }

致电DAL构造函数:

public class LoginBL
{
    private LoginDAL _LoginDAL;
    public bool LoginValidation(string login, string password)
    {
        _LoginDAL = new LoginDAL(); //Gives the error. As i remember given that dependency injection works correctly it should work like this.           
        return _LoginDAL.LoginValidation(login, password); ;
    }
}

对于我的dal,我使用的是一个c#类库项目,其中我的constructor具有dbcontext作为参数的构造函数:

       private readonly FICTIEContext _Database;
    public LoginDAL(FICTIEContext database)
    {
        _Database = database;
    }

使用此代码时,我似乎无法拨打构造函数,而没有得到有关不给DAL调用任何参数的错误。

我缺少解决方案的哪一部分以及如何修复。

当然,在给定当前实现的情况下,创建LoginDAL实例时,您需要提供FICTIEContext的实例。这就是使用依赖注入的目的。

问题是您在这种情况下是否真的需要或需要依赖注入?我对此表示怀疑。无论如何,没有DbContext的DAL类应该没有意义。

在这种情况下,您可以简单地让DAL类内部创建FICTIEContext的实例。当然,您还可以提供构造函数的超载,如果您想:

接受上下文
private readonly FICTIEContext _Database;
public LoginDAL()
{
    _Database = new FICTIEContext();
}
public LoginDAL(FICTIEContext database)
{
    _Database = database;
}

然后,班级的消费者可以选择是提供自定义FICTIEContext还是让LoginDAL类创建一个默认一个。

最新更新