IM/backend/IM_API/Infrastructure/EventBus/InMemoryEventBus.cs

33 lines
988 B
C#

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