using Autofac; using Admin.Core.Common; using Admin.Core.EventBus; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System; namespace Admin.Core.Extensions { /// /// EventBus 事件总线服务 /// public static class EventBusSetup { public static void AddEventBusSetup(this IServiceCollection services) { if (services == null) throw new ArgumentNullException(nameof(services)); if (Appsettings.app(new string[] { "RabbitMQ", "Enabled" }).ObjToBool() && Appsettings.app(new string[] { "EventBus", "Enabled" }).ObjToBool()) { var subscriptionClientName = Appsettings.app(new string[] { "EventBus", "SubscriptionClientName" }); services.AddSingleton(); services.AddTransient(); services.AddSingleton(sp => { var rabbitMQPersistentConnection = sp.GetRequiredService(); var iLifetimeScope = sp.GetRequiredService(); var logger = sp.GetRequiredService>(); var eventBusSubcriptionsManager = sp.GetRequiredService(); var retryCount = 5; if (!string.IsNullOrEmpty(Appsettings.app(new string[] { "RabbitMQ", "RetryCount" }))) { retryCount = int.Parse(Appsettings.app(new string[] { "RabbitMQ", "RetryCount" })); } return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, subscriptionClientName, retryCount); }); } } public static void ConfigureEventBus(this IApplicationBuilder app) { if (Appsettings.app(new string[] { "RabbitMQ", "Enabled" }).ObjToBool() && Appsettings.app(new string[] { "EventBus", "Enabled" }).ObjToBool()) { var eventBus = app.ApplicationServices.GetRequiredService(); eventBus.Subscribe(); } } } }