C# 为什么在控制器中注入DBContext和singleton的作用域实例的依赖项会引发无效操作异常?

C# 为什么在控制器中注入DBContext和singleton的作用域实例的依赖项会引发无效操作异常?,c#,asp.net,asp.net-core-2.1,C#,Asp.net,Asp.net Core 2.1,我有一个接口,它的实现在服务容器中与DBContext一起注册为单例服务。我在控制器中为这两个服务使用了依赖项注入,但它引发了以下异常: InvalidOperationException: Cannot consume scoped service 'DepartmentOrders.Data.OrderTypeContext' from singleton 'DepartmentOrders.ShoppingCart.ICartDB'. 我并不打算让singleton服务使用dbconte

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

InvalidOperationException: Cannot consume scoped service 'DepartmentOrders.Data.OrderTypeContext' from singleton 'DepartmentOrders.ShoppingCart.ICartDB'.
我并不打算让singleton服务使用dbcontext,我认为它们将是独立的服务,这意味着不应该存在任何父子关系,但我对这些服务并不熟悉,所以这里我肯定遗漏了一些东西

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

ConfigureServices方法:

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") ));
}

public void配置服务(IServiceCollection服务)
{
services.AddSingleton();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddDbContext(选项=>
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());
}

ICartDB购物车;
私有只读OrderTypeContext数据;
公共家庭控制器(OrderTypeContext\u数据,ICartDB\u购物车)
{
this.Cart=\u Cart;
this.Data=\u Data;
}
公共异步任务索引()
{
返回视图(wait Data.Departments.toListSync());
}
单身人士:

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);
}
公共接口ICartDB
{
bool存在(int ItemId);
bool是空的();
字典GetCart();
作废删除项(字符串ItemId);
无效附加项(整数项ID、整数数量);
无效编辑项(整数项ID,整数数量);
}

是否将
OrderTypeContext
注入到
CartDB
实现中?如果是这样,这将是一个生命周期问题,因为OrderTypeContext的(作用域)生命周期将比CartDB的单例生命周期短。相关的讨论可以在我刚刚检查过的网站上找到,这就是问题所在。是的,团队为
AddDbContext
添加了一个重载,它接受了如图所示的生存期