c# - 激活服务时无法解析 IDbContext
问题描述
使用 MediatR 在 CQRS 中工作,在 Startup 中我注册了 DomainEventDispatcher、Repos、Query- 和 Eventhandlers 以及服务。存储库与 DbContext 一起使用,我的服务也是如此。一切 CRUD 工作,直到我在控制器中注入我的服务,我收到以下错误:尝试激活“服务”时无法解析类型“IDbContext”的服务。
我觉得奇怪
services.AddDbContext<DbContext>(options =>
{
options.UseLazyLoadingProxies().UseSqlServer(cs);
options.EnableSensitiveDataLogging(true);
});
在注册以下内容之前:
services
.AddScoped<IDomainEventsDispatcher, DomainEventsDispatcher>()
.AddScoped<IRepo<ToDoItem>, EfCRepo<ToDoItem>>()
.AddMediatR(cfg => cfg.AsScoped(), typeof(ToDoItemsQueryHandler).GetTypeInfo().Assembly)
.AddScoped<INotificationHandler<Event>, EventHandler>()
.AddMediatR(cfg => cfg.AsScoped(), typeof(EventHandler).GetTypeInfo().Assembly);
.AddScoped<IService, Service>()
当我尝试使用 AddScoped IDbContext
AddScoped<IDbContext, DbContext>()
我的上下文是空的,不能再从 Db 获取实体。
我觉得奇怪的是,我需要为服务添加范围 IDbContext,因为 Repos 也可以与 DbContext 一起使用,而无需解析 IDbContext 类型的服务。
我查看了 MediatR 官方文档,找不到任何关于如何注册服务的信息,并且谷歌搜索“注册服务 MediatR 启动”主要重定向到其他问题,因此非常欢迎你们提供任何帮助/见解!
我提出了一个新问题,因为我可以依赖注入,但对于服务来说似乎有所不同。大多数关于在启动时注册的 S/O 问题对我来说都比较笼统。
提前致谢!
解决方案
供将来参考:解决方案确实是添加
AddScoped<IDbContext, DbContext>()
一定是其他东西打破了我的背景
推荐阅读
- regex - 正则表达式在不同行的两个句子之间找到一个句子
- c# - SQL 服务器通信问题 - 基础提供程序失败
- php - WordPress:如何在上传时使用当前日期重命名图像?
- reactjs - replaceAll 在 Cordova 中不起作用
- javascript - How to filter an object by comparing with the elements of the arrays
- python - How to create an instance by using the name of the class of another instance in python?
- go - Prometheus Exporter - Filtering targets
- swiftui - SwiftUI re-orderable non full screen list
- makefile - Compile custom package on openwrt including lib libpaho-mqtt3c
- azure - 如何将变量发送到 ARM 模板 maintemplate.json 输入?