在MassTransit 6.0中将NLog与Autofac配合使用?

内尔森

由于以下原因,我的使用者无法从Autofac实例化:

无法解析参数“ Microsoft.Extensions.Logging.Logger 1[MyConsumer] logger' of constructor 'Void .ctor(MyService, Microsoft.Extensions.Logging.Logger1 [MyConsumer])”。

ILogger在除MassTransit消费者之外的所有其他类别中都可以解决。我相信这是LogContext.ConfigureCurrentLogContext()的问题;和操作顺序。以下是为简洁起见而编辑的代码:

ContainerBuilder builder = new ContainerBuilder(); // Autofac

builder.RegisterType<LoggerFactory>()
                         .As<ILoggerFactory>()
                         .SingleInstance();

builder.RegisterGeneric(typeof(Logger<>))
                         .As(typeof(ILogger<>))
                         .SingleInstance();

builder.RegisterAssemblyTypes() // load up all services, yada yada

// what to pass here? I'm inside an unbuilt Autofac Container at this point. There is no ILoggerFactory until the Container is built!
LogContext.ConfigureCurrentLogContext(); // configure MassTransit logging

builder.AddMassTransit(x => 
            {
                x.AddConsumers(Assembly.GetEntryAssembly());

                x.AddBus(bus => MassTransit.Bus.Factory.CreateUsingRabbitMq(config =>
                {
                    config.ConfigureEndpoints(bus); // wire-up consumers discovered by the AddConsumers() call above
                }));
            });

Container = builder.Build(); // now build the container

// add NLog
IServiceProvider serviceProvider = new AutofacServiceProvider(Container); // this requires a built Container!
ILoggerFactory loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
loggerFactory.AddNLog();

我应该注意,MassTransit中的日志记录实际上是有效的。我看到了有关队列和消息的所有调试输出。但是消费者不会出于任何原因实例化。如果我尝试手动操作,Resolve<ILogger<MyConsumer>>()我会得到一个ILogger,但是MassTransit似乎有麻烦。

编辑:通过VS输出的​​完整错误消息:

使用可用服务和参数
无法调用在类型'MyConsumer'上通过'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'找到的构造函数:无法解析参数'Microsoft.Extensions.Logging.Logger 1 [MyConsumer] logger'构造函数'Void .ctor(MyService,Microsoft.Extensions.Logging.Logger`1 [MyConsumer])'。*

套件版本:

  • Autofac.Extensions.DependencyInjection 5.0.1
  • 大众运输6.0
  • MassTransit.Autofac 6.0
  • NLog.Extensions.Logging 1.6.1
西里尔·杜兰德

无法解析参数 Microsoft.Extensions.Logging.Logger 1[MyConsumer] logger

此错误消息表示Autofac找不到已注册的Logger<MyConsumer>如果您查看自己的注册ILogger<>,则不会注册Logger<>您应该将依赖项更改为其中的接口版本MyConsumerautofac会找到它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用MassTransit

来自分类Dev

在Xamarin中使用MassTransit

来自分类Dev

如何使用MassTransit

来自分类Dev

如何使用MassTransit的IConsumeObserver?

来自分类Dev

使用 MassTransit 发布事件

来自分类Dev

使用Autofac将对象注入MassTransit Saga

来自分类Dev

MassTransit中基于内容的路由

来自分类Dev

使用MSMQ的MassTransit发布/订阅

来自分类Dev

MassTransit,Autofac和2个总线实例

来自分类Dev

Masstransit发布的消息从队列中消失

来自分类Dev

MassTransit中不存在的主题的例外

来自分类Dev

Masstransit InboundMessageInterceptor与使用者的LifetimeScope不同

来自分类Dev

使用预取> 1运行的MassTransit传奇

来自分类Dev

使用MassTransit集成测试微服务

来自分类Dev

使用Kafka在MassTransit中发布与制作

来自分类Dev

使用MassTransit SQS时如何设置MessageGroupId?

来自分类Dev

使用预取> 1运行的MassTransit传奇

来自分类Dev

无法使用 MassTransit 连接到 Amazon MQ

来自分类Dev

在MassTransit使用者中获取动态对象

来自分类Dev

cloudampq中的MassTransit高内存使用率

来自分类Dev

如何使用MassTransit从RabbitMQ DeadLetter队列中检索消息?

来自分类Dev

MassTransit是否可以仅按需使用队列中的消息?

来自分类Dev

使用MassTransit使用交换和路由密钥发布消息

来自分类Dev

MassTransit自动命名传奇中的条件转换

来自分类Dev

MassTransit中处理程序和消费者之间的区别

来自分类Dev

在MassTransit.RabbitMq中向标头添加值

来自分类Dev

在发布者端在SimpleInjector中为MassTransit建立队列

来自分类Dev

MassTransit 6.2.3中的可疑ConnectHandler扩展方法问题

来自分类Dev

消费者传奇与MassTransit中的自动命名

Related 相关文章

热门标签

归档