小编Gam*_*vil的帖子

配置通用消费者的公共交通

我正在使用 MassTransit 将消息传递代理集成到我们现有的应用程序中。我们已经实现了一种具有通用实现的命令处理程序,如下所示:

public class MyCommandHandler: CommandHandlerBase<MyCommand>
Run Code Online (Sandbox Code Playgroud)

现在,制作一个通用 Consumer 会相对容易一些,它会执行一些锅炉电镀,并将工作交给 DI 容器请求的就绪命令处理程序。

public class CommandConsumer<TCommand> : IConsumer<TCommand>
Run Code Online (Sandbox Code Playgroud)

然后我可以通过 Microsoft DI 轻松注册:

cfg.AddConsumer<CommandConsumer<MyCommand>>(x => some configuration...);
Run Code Online (Sandbox Code Playgroud)

这一切都很有效,所以我继续下一步,即将消费者注册提取到一个通用的帮助器方法中,这就是我有点困惑的地方。该方法(当前)看起来有点像这样

public static IServiceCollection ConfigureMassTransit(this IServiceCollection services, params Type[] consumerTypes)
{
        return 
            services.AddMassTransit(cfg =>
            {
                foreach (var consumerType in consumerTypes)
                {
                    cfg.AddConsumer(consumerType);
                }
                // or cfg.AddConsumers(consumerTypes);
                cfg.AddBus(context => Bus.Factory.CreateUsingRabbitMq(config =>
                {
                    var host = config.Host("localhost", "/",
                        h =>
                        {
                            h.Username("guest");
                            h.Password("guest");
                        });
                    config.ConfigureEndpoints(context);
                }));

            });
    }
Run Code Online (Sandbox Code Playgroud)

这将被称为services.ConfigureMassTransit(typeof(CommandConsumer<MyCommand>)); 这再次有效,但我不知道如何将附加配置添加到注册中;需要 Action 的重载仅在使用通用签名时才可用,当您只有可用的签名时,您不能直接使用通用签名Type。我尝试CommandConsumer: IConsumer …

c# dependency-injection masstransit

5
推荐指数
1
解决办法
2629
查看次数

标签 统计

c# ×1

dependency-injection ×1

masstransit ×1