无法解析参数“MediatR.ServiceFactory serviceFactory”(MediatR with Autofac)

Var*_*una 1 autofac mediatr

我正在尝试在 .NET Framework 4.6.2 中使用 Autofac 运行 MediatR。

我的注册:

public class MediatorModule : Autofac.Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.RegisterSource(new ContravariantRegistrationSource());
        builder.RegisterAssemblyTypes(typeof(IMediator ).Assembly).AsImplementedInterfaces();
        builder.RegisterType<HealthCheckQueryHandler>().As<IRequestHandler<HealthCheckQuery, HttpStatusCode>>();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的控制器:

[RoutePrefix("api/v1/healthcheck")]
public class HealthCheckController : ApiController
{
    private readonly IMediator _mediator;

    public HealthCheckController(IMediator mediator)
    {
        _mediator = mediator;
    }

    [HttpGet]
    [Route("")]
    public async Task<HttpStatusCode> Get()
    {
        var query = new HealthCheckQuery();
        var result = await _mediator.Send(query);
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试点击这个 api 方法时,我收到以下错误:在类型 'MediatR.Mediator' 上找到的带有 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' 的构造函数都不能用可用的服务和参数调用:\ r\n无法解析构造函数“Void .ctor(MediatR.ServiceFactory)”的参数“MediatR.ServiceFactory serviceFactory”

wiki ( https://github.com/jbogard/MediatR/wiki ) 要求我们注册 SingleInstanceFactory 和 MultiInstanceFactory。但是 Visual Studio 无法解析这些符号中的任何一个。

如何解决此问题以使 MediatR 与 Autofac 一起使用?

Aid*_*dos 5

我知道这是一个旧帖子,但以防万一其他人用谷歌搜索这个。

您缺少注册ServiceFactory实例。

builder.Register<ServiceFactory>(ctx =>
{
    var c = ctx.Resolve<IComponentContext>();
    return t => c.Resolve(t);
});
Run Code Online (Sandbox Code Playgroud)

取自此处: MediatR 示例

  • 我知道这是一个更旧的答案,但如果您使用 MediatR 12,请注意该示例删除了已弃用的“ServiceFactory”,并且您必须使用“ServiceCollection”“var services = new ServiceCollection(); 生成器。填充(服务);` (3认同)