依赖关系注入 具有依赖关系注入表单 DbContext 的类



我该如何注入这个:

private readonly CarModelsController _carModelsController;
public AdminController(CarModelsController carModelsController)
{
_carModelsController = carModelsController;
}

当CarModelsController看起来像这样时:

[ApiController]
public class CarModelsController : ControllerBase
{
private readonly ApplicationDbContext _context;
public CarModelsController(ApplicationDbContext context)
{
_context = context;
}

当我注入它时,我需要有 DbContext?是否应该以另一种方式完成?去这里的正确方法是什么?我从来没有学过这个。

我建议您查看将控制器相互注入的选择。

创建保存 Db 相关操作的服务抽象和类

public interface IDataService {
//...expose desired members
}
public class DataService: IDataService {
private readonly ApplicationDbContext context;
public DataService(ApplicationDbContext context) {
this.context = context;
}
//...other members implemented
}

并将其注入您的控制器。

public class AdminController: ControllerBase {    
private readonly IDataService service;
public AdminController(IDataService service) {
this.service = service
}
//...
}
[ApiController]
public class CarModelsController : ControllerBase  
private readonly IDataService service;
public CarModelsController(IDataService service) {
this.service = service
}
//...
}

剩下的就是在组合根目录中启动时向 DI 容器注册所有依赖项。

假设默认的 .Net Core DI

services.AddDbContext<ApplicationDbContext>(...);
services.AddScoped<IDataService, DataService>();

ASP.NET 核心中的引用依赖关系注入

你不得不将依赖项注入到启动类 ConfigureServices 方法中。

public void ConfigureServices (IServiceCollection services) {
services.AddScoped<DbContext, Your_Project_DbContext> ();
services.AddScoped<Your_Interface, Your_Concrete_Class> ();
}

最新更新