首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法解析参数“MediatR.ServiceFactory serviceFactory”(使用Autofac的MediatR)

无法解析参数“MediatR.ServiceFactory serviceFactory”(使用Autofac的MediatR)
EN

Stack Overflow用户
提问于 2018-06-07 12:52:55
回答 2查看 5.8K关注 0票数 3

我试图在MediatR Framework4.6.2中使用Autofac运行.NET。

我的注册:

代码语言:javascript
复制
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>>();
    }
}

我的控制器:

代码语言:javascript
复制
[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;
    }
}

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

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

如何解决这个问题以使MediatR与Autofac一起工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-09 08:17:01

我知道这是个很旧的帖子,但万一还有人在谷歌上搜索这个。

您缺少注册ServiceFactory实例。

代码语言:javascript
复制
builder.Register<ServiceFactory>(ctx =>
{
    var c = ctx.Resolve<IComponentContext>();
    return t => c.Resolve(t);
});

从这里拍摄:MediatR实例

票数 8
EN

Stack Overflow用户

发布于 2018-06-13 18:51:40

我假设您使用的是Mediatr v3.0.x。

您错过了SingleInstanceFactoryMultiInstanceFactory的注册,如下所示。

代码语言:javascript
复制
builder.Register<SingleInstanceFactory>(ctx => {
    IComponentContext c = ctx.Resolve<IComponentContext>(); 
        return type => {
            Object o; 
            return c.TryResolve(type, out o) ? o : null; 
        };
    }); 

builder.Register<MultiInstanceFactory>(ctx => {
    IComponentContext c = ctx.Resolve<IComponentContext>(); 
    return type => (IEnumerable<Object>)c.Resolve(typeof(IEnumerable<>).MakeGenericType(type)); 
    });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50741727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档