c# - 为什么依赖注入 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);
}
解决方案
推荐阅读
- android - 在午夜增加共享偏好的数量
- ansible - 从两个数组 Ansible 中获取差异
- vue.js - Vuetify - 清除 v-text-field 时如何触发方法
- html - 均匀间隔图标,无论它们是否有通知徽章
- ios - HTTP 加载失败(错误代码:-1005 [4:-4]) - 但不是 Alamofire
- firebase - 2个日期之间的firebase实时数据库查询日期不匹配任何内容
- python - 使用 python 子进程从无限运行的程序中读取
- node.js - 如何使用 Nginx 通过 express 路由器加载页面
- python - 用户提交表单后,Django视图不呈现数据
- java - 我可以使用 spring boot 覆盖遗留生成代码的 jdbc 目录吗?