using Microsoft.Extensions.DependencyInjection; using Pole.Core; using Pole.Core.Processor; using Pole.Core.Utils; using Pole.EventBus; using Pole.EventBus.EventHandler; using Pole.EventBus.Processor; using Pole.EventBus.Processor.Server; using Pole.EventBus.UnitOfWork; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Microsoft.Extensions.DependencyInjection { public static class PoleEventBusStartupConfigExtensions { public static StartupConfig AddEventBus(this StartupConfig startupOption, Action config = null) { Action defaultConfig = option => { }; var finalConfig = config ?? defaultConfig; startupOption.Services.Configure(finalConfig); startupOption.Services.AddSingleton(); startupOption.Services.AddScoped(); startupOption.Services.AddSingleton(); startupOption.Services.AddSingleton(); startupOption.Services.AddSingleton(); startupOption.Services.AddHostedService(); startupOption.Services.AddScoped(); startupOption.Services.AddSingleton(); RegisterEventHandler(startupOption); return startupOption; } private static void RegisterEventHandler(StartupConfig startupOption) { foreach (var assembly in AssemblyHelper.GetAssemblies()) { foreach (var type in assembly.GetTypes().Where(m => typeof(IPoleEventHandler).IsAssignableFrom(m) && m.IsClass && !m.IsAbstract && !typeof(Orleans.Runtime.GrainReference).IsAssignableFrom(m))) { startupOption.Services.AddScoped(type); } } } } }