c# - 具有依赖注入的单独类库项目中的 DbContext
问题描述
我目前正在为一个学校项目创建一个 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,我将 ac# 类库项目与一个类一起使用,其中我有一个以 DbContext 作为参数的构造函数:
private readonly FICTIEContext _Database;
public LoginDAL(FICTIEContext database)
{
_Database = database;
}
使用此代码时,我似乎无法调用构造函数而不会在调用 DAL 时不提供任何参数的错误。
我的解决方案缺少哪一部分,我该如何解决。
解决方案
当然,您需要FICTIEContext
在创建LoginDAL
给定当前实现的实例时提供一个实例。这就是使用依赖注入的目的。
问题是在这种情况下您是否真的需要或想要依赖注入?我对此表示怀疑。无论如何都应该没有使用或测试 DAL 类的意义DbContext
。
在这种情况下,您可以简单地让 DAL 类在FICTIEContext
内部创建一个实例。如果您愿意,您当然也可以提供接受上下文的构造函数的重载:
private readonly FICTIEContext _Database;
public LoginDAL()
{
_Database = new FICTIEContext();
}
public LoginDAL(FICTIEContext database)
{
_Database = database;
}
然后类的消费者可以选择是提供一个自定义的FICTIEContext
还是让LoginDAL
类创建一个默认的。
推荐阅读
- sql - 如何根据python中的列名引用值
- google-cloud-platform - 实时存储来自 Cloud Firestore 的所有更新数据
- c++ - “访问被拒绝”错误后可执行代码文件随机消失?
- javascript - 在 controller.js 中找不到名称“jQuery”错误
- rust - Rust 在 while let 中堆叠可选
- javascript - 在 Javascript 中使用 For 循环来计数一个二维码扫描器
- python - 需要使用python删除文件中的if块
- php - WooCommerce 自定义缺货文本 + 特定产品 ID
- docker-compose - 使用 docker-compose 构建 3 个服务,但只启动 2 个容器
- ios - 尝试访问配置时领域崩溃