我有以下 MediatR 行为:
public class FailFastRequestBehavior<TRequest, TResponse>
: IPipelineBehavior<TRequest, TResponse>
where TRequest : IRequest<TResponse>
where TResponse : BaseResponse
并在默认的 ASP.NET Core DI 容器中注册,如下所示:
services.AddScoped(
typeof(IPipelineBehavior<,>),
typeof(FailFastRequestBehavior<,>));
它处理这样的命令:
public class Command: IRequest<BaseResponse>
这效果很好,但是BaseResponse
类有一个可以包含命令结果的属性,这样它的类型为object
,这不太好。
我想将 BaseResponse 设为通用,因此命令将类似于:
public class Command: IRequest<BaseResponse<MyObject>>
我如何更改行为签名以支持此操作,然后正确注册它?如果可能的话...
我尝试了几件事,但对我来说似乎更合理的是:
public class FailFastRequestBehavior<TRequest, TResponse, TValue>
: IPipelineBehavior<TRequest, TResponse>
where TRequest : IRequest<TResponse>
where TResponse : BaseResponse<TValue>
但是我的行为有 3 个通用参数,而 MediatR 接口只有 2 个,我无法在 DI 容器中注册它。
有什么建议么?