using IM_API.Application.Interfaces; using IM_API.Domain.Interfaces; namespace IM_API.Infrastructure.EventBus { public class InMemoryEventBus : IEventBus { private IServiceProvider _serviceProvider; private ILogger _logger; public InMemoryEventBus(IServiceProvider serviceProvider, ILogger logger) { _serviceProvider = serviceProvider; _logger = logger; } public async Task PublishAsync(TEvent @event) where TEvent : IEvent { var handlers = _serviceProvider.GetServices>(); foreach (var handler in handlers) { try { await handler.Handle(@event); } catch(Exception e) { _logger.LogError("EventHandler error:"+e.Message, e); } } } } }