Skip to content

Instantly share code, notes, and snippets.

@trailmax
Created May 13, 2014 21:28
Show Gist options
  • Save trailmax/30f1f73fff08fcd2064d to your computer and use it in GitHub Desktop.
Save trailmax/30f1f73fff08fcd2064d to your computer and use it in GitHub Desktop.
Ambient Context pattern for domain events with static call and mock replacement
public interface IDomainEventDispatcher
{
void Dispatch<TEvent>(TEvent eventToDispatch) where TEvent : IDomainEvent;
}
public static class DomainEvents
{
public static IDomainEventDispatcher Dispatcher { get; set; }
public static void Raise<TEvent>(TEvent eventToRaise) where TEvent : IDomainEvent
{
Dispatcher.Dispatch(eventToRaise);
}
}
// raise your events in domain entities
DomainEvents.Raise(new NameChangedEvent(person.PersonId, person.Name));
//Unit test your dispatcher
var domainEventsDispatcher = new Mock<IDomainEventDispatcher>();
DomainEvents.Dispatcher = domainEventsDispatcher.Object;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment