以下代码注册了使用者接口实现,并注册了通用使用者接口的通用装饰器。
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注册一个通用的消费者装饰器。