如何使用 Autofac 模块配置 MassTransit?

win*_*lus 5 masstransit autofac autofac-module

我正在尝试使用 Autofac(最新的 NuGet 包)设置 MassTransit,但似乎无法在该ContainerBuilder级别注册消费者。有没有人设法将 MassTransit 与 Autofac 一起使用,尤其是模块?

在下面的示例中,无法解析 DoSomethingConsumer,除非我取消注释该x.AddConsumer行并在构建器上注释注册。

           builder.RegisterType<BusControlHostedService>().As<IHostedService>();
            builder.RegisterType<DoSomethingConsumer>().AsSelf().AsImplementedInterfaces();

            builder.AddMassTransit(x =>
            {
                //x.AddConsumer<DoSomethingConsumer>();

                x.AddBus(componentContext => Bus.Factory.CreateUsingRabbitMq(cfg =>
                {
                    cfg.Host("host", "vhost", h =>
                    {
                        h.Username("user");
                        h.Password("password");
                    });

                    cfg.UseExtensionsLogging(componentContext.Resolve<ILoggerFactory>());

                    cfg.ConfigureEndpoints(componentContext);

                }));

                x.AddRequestClient<DoSomethingRequest>();
            });
Run Code Online (Sandbox Code Playgroud)

https://masstransit-project.com/MassTransit/usage/containers/autofac.html 上的文档似乎是错误的。.AddConsumer构建器上没有扩展方法。

我希望从模块注册消费者,并能够按照约定(如上面的示例)或使用.RegisterEndpoint.

对此的任何帮助将不胜感激。

kar*_*gro 0

该问题是由于 ASP.NET Core 不从 DI 容器 (IServiceProvider) 请求控制器而引起的,而是请求其 ctor 参数。所以 Autofac 看不到控制器。您可以使用AddControllersAsServices(),但这仅适用于在此调用之前注册的控制器。所以你需要先注册控制器,然后调用AddControllersAsServices()它应该会有所帮助