public void Dispatch(DomainEvent domainEvent) { var handlerType = typeof(IHandle<>).MakeGenericType(domainEvent.GetType()); var wrapperType = typeof(DomainEventHandler<>).MakeGenericType(domainEvent.GetType()); var handlers = _container.GetAllInstances(handlerType); var wrappedHandlers = handlers .Cast<object>() .Select(handler => (DomainEventHandler)Activator.CreateInstance(wrapperType, handler)); foreach (var handler in wrappedHandlers) { handler.Handle(domainEvent); } }
public abstract void Handle(DomainEvent domainEvent);