首页 > 解决方案 > 依赖注入具有依赖注入形式 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 吗?是否应该以其他方式完成?去这里的正确方法是什么?我从来没有学过这个。

标签: c#dependency-injection.net-core

解决方案


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

创建一个包含 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 Core 中的引用依赖注入


推荐阅读