Sto provando a utilizzare DI con la mia classe consumer senza successo.Come utilizzare Autofac Dipendenza iniezione in MassTransit IConsume
La mia classe di consumatori:
public class TakeMeasureConsumer : IConsumer<TakeMeasure>
{
private IUnitOfWorkAsync _uow;
private IInstrumentOutputDomainService _instrumentOutputDomainService;
public TakeMeasureConsumer(IUnitOfWorkAsync uow,
IInstrumentOutputDomainService instrumentOutputDomainService)
{
_uow = uow;
_instrumentOutputDomainService = instrumentOutputDomainService;
}
public async Task Consume(ConsumeContext<TakeMeasure> context)
{
var instrumentOutput = Mapper.Map<InstrumentOutput>(context.Message);
_instrumentOutputDomainService.Insert(instrumentOutput);
await _uow.SaveChangesAsync();
}
}
Quando voglio registrare la fabbrica di autobus il consumatore deve avere un costruttore senza parametri.
protected override void Load(ContainerBuilder builder)
{
builder.Register(context =>
Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var host = cfg.Host(new Uri("rabbitmq://localhost/"), h =>
{
h.Username("guest");
h.Password("guest");
});
cfg.ReceiveEndpoint(host, "intrument_take_measure", e =>
{
// Must be a non abastract type with a parameterless constructor....
e.Consumer<TakeMeasureConsumer>();
});
}))
.SingleInstance()
.As<IBusControl>()
.As<IBus>();
Qualsiasi aiuto sarebbe apprezzato, io davvero non so come registrare il mio comportamento dei ...
Grazie
Ciao Chris, questo sta lavorando per me. Il pacchetto di masstransit.Autofac lo rende davvero facile e il trasferimento di massa è fantastico. Grazie! – JoyC
Chris Patterson, il codice nella tua risposta sembra non funzionare. context.Resolve - ma hai registrato IConsumerFactory. Quando ho cambiato, ho il problema della risoluzione: Autofac.Core.Activators.Reflection.DefaultConstructorFinder 'sul tipo' MassTransit.AutofacIntegration.AutofacConsumerFactory'1 –
flamedmg
Prova in questo modo: https://github.com/MassTransit/MassTransit/blob /develop/src/MassTransit.Host/ContainerBuilderExtensions.cs#L28 –