using System; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Pole.Core; using Pole.Core.EventBus; namespace Pole.EventBus.RabbitMQ { public static class Extensions { public static void AddRabbitMQ( this IServiceCollection serviceCollection, Action rabbitConfigAction, Func eventBusConfig = default) { serviceCollection.Configure(config => rabbitConfigAction(config)); serviceCollection.AddSingleton(); serviceCollection.AddHostedService(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(serviceProvider => serviceProvider.GetService() as IProducerContainer); Startup.Register(async serviceProvider => { var container = serviceProvider.GetService(); if (eventBusConfig != default) await eventBusConfig(container); else await container.AutoRegister(); }); } } }