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();
}
}
}
}