【发布时间】:2019-03-21 00:54:18
【问题描述】:
我目前正在为一个学校项目创建一个 WebAPI。 之前与 DI 一起工作,但我似乎无法让它在当前环境中工作。
对于该项目,我正在为我的 DAL 需要通过 DI 获取 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# 类库项目,其中我有一个以 DbContext 作为参数的构造函数:
private readonly FICTIEContext _Database;
public LoginDAL(FICTIEContext database)
{
_Database = database;
}
使用此代码时,我似乎无法调用构造函数而不会在调用 DAL 时不提供任何参数的错误。
我的解决方案缺少哪一部分以及如何解决。
【问题讨论】:
-
你如何使用 LoginDAL - 你是在某处注入它(控制器)吗?
-
不,我只有从另一个层引用它,我必须从中调用它
-
能否提供调用 LoginDAL 构造函数的代码。
-
如果注入 DAL,创建 DAL 实例的代码也需要新建 DbContext。但是你真的需要用 DbContext 注入 DAL 吗? DAL 的 EF 实现可以直接创建 DbContext 的实例。 DbContext 无论如何都属于 DAL。
-
@Innominatum 已将其添加到帖子中
标签: c# entity-framework dependency-injection