33 lines
988 B
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|