FastEndpoints无法创建命令处理程序实例问题求助
解决FastEndpoints中“无法为命令创建处理程序实例”的异常
核心问题:不正确的命令调用方式
你直接实例化CreateClaim并调用ExecuteAsync()的方式不符合FastEndpoints命令总线的工作机制。命令总线需要通过依赖注入的ICommandBus来发送命令,而非手动实例化命令对象。
修改端点代码如下:
// 注入ICommandBus private readonly ICommandBus _commandBus; // 通过构造函数注入依赖 public YourEndpointClass(ICommandBus commandBus) { _commandBus = commandBus; } public override void Configure() { Post("/api/claim/create"); AllowAnonymous(); } public override async Task HandleAsync(ClaimRequest req, CancellationToken ct) { await _commandBus.SendAsync(new CreateClaim { ClaimName = req.ClaimName }, ct); }
额外排查要点
- 确认处理程序注册:确保
CreateClaimHandler继承自CommandHandler<CreateClaim>,且其所在程序集已被FastEndpoints扫描到。若处理程序在独立项目中,需在Program.cs指定扫描范围:builder.Services.AddFastEndpoints(c => { c.Assemblies = new[] { typeof(CreateClaimHandler).Assembly }; }); - 检查处理程序构造函数依赖:如果
CreateClaimHandler的构造函数包含数据库上下文、自定义服务等依赖项,需确保这些依赖已注册到DI容器,否则DI无法解析处理程序实例。 - 验证命令与处理程序匹配:确保
CreateClaim命令对应的处理程序是CommandHandler<CreateClaim>,避免泛型参数不匹配导致的无法绑定问题。
内容的提问来源于stack exchange,提问作者Pranav Joshi
相关产品推荐
相关产品推荐

