gpt4 book ai didi

容器中的 MediatR Autofac 处理程序注册

转载 作者:行者123 更新时间:2023-12-02 00:47:47 26 4
gpt4 key购买 nike

我在我的第一个 IMediatR Autofac MVC 项目中遇到了问题。非常感谢您的帮助。提前致谢!!!

Handler was not found for request of type SliceProject.Services.Query.GetUserListQuery. Container or service locator not configured properly or handlers not registered with your container.

Autofac 容器代码:

builder
.RegisterAssemblyTypes(typeof(IRequest<>).Assembly)
.Where(t => t.IsClosedTypeOf(typeof(IRequest<>)))
.AsImplementedInterfaces();

builder
.RegisterAssemblyTypes(typeof(IRequestHandler<,>).Assembly)
.Where(t => t.IsClosedTypeOf(typeof(IRequestHandler<,>)))
.AsImplementedInterfaces();

最佳答案

那是因为您要告诉 Autofac 查看包含 IRequestHandler<TRequest, TResponse> 的程序集类型。该类型存在于 MediatR 程序集中,因此您的处理程序不可能存在于该程序集中。

您必须尝试注册,以便它在定义您的处理程序的程序集中查找。如果它们都在一个程序集中定义,则选择一个处理程序并将其用作标记类型。我试图在这里猜测您的一位处理者的名字:

builder
.RegisterAssemblyTypes(typeof(GetUserListQueryHandler).Assembly)
.Where(t => t.IsClosedTypeOf(typeof(IRequestHandler<,>)))
.AsImplementedInterfaces();

另请注意,Autofac 提供的功能可以简化注册过程,AsClosedTypesOf .它做的事情完全一样。

builder
.RegisterAssemblyTypes(typeof(GetUserListQueryHandler).Assembly)
.AsClosedTypesOf(typeof(IRequestHandler<,>)));

最后,这有点不相关,但是为什么要尝试在容器中注册您的请求?请求通常由自定义代码创建,而不是从容器中解析。在您的情况下,它也没有任何效果,因为您犯了与处理程序相同的错误,即在 MediatR 程序集中查找请求,该程序集不包含 IRequest<TResponse> 的任何实现。 .

关于容器中的 MediatR Autofac 处理程序注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42374101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com