如何使用autofac在Rabbitmq masstransit中向消费者注册通用装饰器?

时间:2020-01-13 13:06:12

标签: rabbitmq autofac masstransit

以下代码注册了使用者接口实现,并注册了通用使用者接口的通用装饰器。

builder.AddMassTransit();

builder.Register
(
    context =>
    {
        var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
        {
            foreach (var messageConfiguration in messageConfigurations)
            {
                var type = messageConfiguration.Type; // MESSAGE TYPE

                if (messageConfiguration.Consumers.Any())
                    cfg.ReceiveEndpoint($"{type.Namespace}:{type.Name}", ec =>
                    {
                        foreach (var cType in messageConfiguration.Consumers)
                            ec.ConfigureConsumer(context, cType);  //REGISTERS CONSUMER IMPLEMENTATION
                    });

            }
        });
        return busControl;
    }
)
.SingleInstance()
.As<IBusControl>()
.As<IBus>();




builder.RegisterGenericDecorator(typeof(ConsumerDecorator<>), typeof(IConsumer<>)); //DECORATES IConsumer interfaces.

因此,无需使用其装饰器即可解决消费者实现。

我需要将使用者注册为他们的接口,而不是将其注册为实现,以使用修饰符解决使用者。因此,我可以使用autofac注册一个通用的消费者装饰器。

1 个答案:

答案 0 :(得分:0)

没有办法做到。但是MT支持Middlewares,这是更正确的方法。

还有一个示例:Autofac_FilterSpecs.cs