1

我有一个 Mediatr 请求处理程序,我想接受两个不同(相关)请求之一。当我使用基本请求时它工作正常,但是当我使用 时PermissionedGetInformationRequest,我收到一个错误,表明它找不到我的请求的处理程序。

为 MediatR.IRequestHandler2[PermissionedGetInformationRequest, DataIWantView] 类型的请求构造处理程序时出错。在容器中注册您的处理程序

我不确定我是否只是没有正确配置我的 IoC 容器,或者容器不支持我正在尝试做的事情,或者我正在尝试做一些 Mediatr 不支持的事情(但是我很确定是的,我似乎记得我们有一些类似的代码,使用我们的旧 IoC,StructureMap 可以正常工作)

我有个请求:

public class GetInformationRequest : IRequest<DataIWantView>
{
}

以及继承自该请求的请求

public class PermissionedGetInformationRequest : GetInformationRequest  
{
    public int RequesterId { get;set; }
}

和一个请求处理程序:

public class GetInformationHandler : IRequestHandler<GetInformationRequest, DataIWantView>
{
    public Task<DataIWantView> Handle(GetInformationRequestrequest, CancellationToken cancellationToken)
    {
        if (request is PermissionedGetInformationRequest permissionedRequest)
        {
            // Check permission
        }

        // Get the data I want
    }
}

我使用 Dryioc 作为我的 IoC 容器,并注册我使用的处理程序

container.RegisterMany(new[] { typeof(GetInformationHandler).Assembly }, Registrator.Interfaces, made: PropertiesAndFields.Auto);
4

1 回答 1

0

问题已通过使用解决Rules.WithVariantGenericTypesInResolve()。尽管我在上面发表了原始评论,但我只是没有正确设置容器的规则。一旦我设置了规则,它就完美地工作了。

于 2021-02-22T12:13:15.353 回答