/// <summary> /// Add service bus /// </summary> /// <param name="services"><see cref="IServiceCollection"/></param> /// <param name="assembliesSetup">Assemblies where to find <see cref="IIntegrationEvent"/></param> /// <param name="busFactory">Configured bus factory</param> /// <param name="consumersConfigurationAction"><see cref="ConsumersConfiguration"/></param> /// <returns><see cref="IServiceCollection"/></returns> public static IServiceCollection AddServiceBus(this IServiceCollection services, Action <IList <Assembly> > assembliesSetup, Func <IBusRegistrationContext, IBusControl> busFactory, Action <ConsumersConfiguration> consumersConfigurationAction = null) { var consumersConfiguration = new ConsumersConfiguration(); consumersConfigurationAction?.Invoke(consumersConfiguration); services.AddScoped <IServiceBus, ServiceBus>(); services.InjectIntegrationEventHandler(assembliesSetup); services.AddMassTransit(busConfigurator => { busConfigurator.AddBus(busFactory); busConfigurator.AddConsumers(consumersConfiguration.ConsumerTypes.ToArray()); }); services.AddScoped <ServiceBusPublisher>(provider => provider.GetRequiredService <IPublishEndpoint>().Publish); services.AddSingleton <IHostedService, BusHostedService>(); return(services); }
private void ConfigureMassTransit(IServiceCollection services) { services.ConfigureMassTransit(_rabbitMqConfig, ConsumersConfiguration.AddConsumersFromAssembly(GetApplicationLayerAssembly()), RegisterRabbitMqEndpoints()); }