使用MediatR在CQRS中工作,在启动时,我注册了DomainEventDispatcher,Repos,查询和事件处理程序以及服务。仓库可以与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>()
[当我尝试使用[]将IDbContext添加到范围时
AddScoped<IDbContext, DbContext>()
我的上下文为空,无法再从Db获取实体。
我感到奇怪的是,我需要为服务的IDbContext添加范围,就像Repos也可以与DbContext一起使用,而无需解析IDbContext类型的服务。
我看过MediatR官方文档,找不到有关如何注册服务的任何信息,并搜索“注册服务MediatR启动”,大部分重定向到其他问题,因此,非常感谢你们的帮助/见解!
我提出了一个新的问题,因为我可以依赖注入,但是对于服务来说似乎有所不同。关于S / O的大多数关于启动注册的问题对我来说更通用。
提前感谢!
AddScoped<IDbContext, DbContext>()
一定是其他破坏我背景的东西