using System; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Ray.Core; using Ray.Core.EventBus; namespace Ray.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(); }); } } }