use reflection to dispatch events to aggregate roots, allowing them to be private