首页 > 解决方案 > 为什么依赖注入 DBContext 的作用域实例和控制器中的单例会引发无效操作异常?

问题描述

我有一个接口,它的实现在服务容器中与 DBContext 一起注册为单例服务。我已经在这两个服务的控制器中使用了依赖注入,但它引发了以下异常:

InvalidOperationException: Cannot consume scoped service 'DepartmentOrders.Data.OrderTypeContext' from singleton 'DepartmentOrders.ShoppingCart.ICartDB'.

我不打算让单例服务使用dbcontext,并认为它们将是单独的服务,这意味着不应该存在任何父子关系,但我对服务几乎不熟悉,所以我肯定会在这里遗漏一些东西。

如果我删除控制器中的任何注入并留下一个,程序将按预期工作。

配置服务方法:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ICartDB, CartDB>();

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

    services.AddDbContext<OrderTypeContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DP_Orders") ));
}

控制器:

ICartDB Cart;
private readonly OrderTypeContext Data;

public HomeController(OrderTypeContext _Data, ICartDB _Cart)
{
    this.Cart = _Cart;
    this.Data = _Data;
}

public async Task<IActionResult> Index()
{
    return View(await Data.Departments.ToListAsync());
}

单身人士:

public interface ICartDB 
{
    bool Exists(int ItemId);
    bool IsEmpty();
    Dictionary<int, int> GetCart();
    void DeleteItem(string ItemId);
    void AddItem(int ItemId, int Quantity);
    void EditItem(int ItemId, int Quantity);
}

标签: c#asp.netasp.net-core-2.1

解决方案


推荐阅读