Sponsor: Using RabbitMQ or Azure Service Bus in your .NET systems? Well, you could just use their SDKs and roll your own serialization, routing, outbox, retries, and telemetry. I mean, seriously, how hard could it be?

In a couple previous posts I’ve discussed using
Query Objects instead of Repositories and the
Mediator pattern. I find creating query objects being used with the command pattern much cleaner than polluting repositories with a ton of query methods.
The concept is nothing new as many people already use the command pattern in the context of executing commands/behavior following CQRS. However, there is nothing wrong with using the same patterns for the query side.
I’ve been using my own home grown solution of the mediator pattern in a few different projects but had nothing really formalized. I was thinking about creating a simple library until I stumbled upon
MediatR created by
Jimmy Bogard.
It is incredibly simple and only has one dependency, CommonServiceLocator.
The
Github repo has a good set of
docs and some
examples with different dependency injection containers.
Unity RegisterType
I did notice the Unity example didn’t quiet work as described in the example.
The Mediator class takes a ServiceLocatorProvider in its constructor which was not being resolved properly by Unity.
In order to get it functioning correctly, I defined an injection factory and created the Mediator and passed in the UnityServiceLocator.
My complete Unity configuration which is also using MediatR to publish events from
NEventStore:
MediatR v2.0
Although v1 has a dependency on CommonServiceLocator, it appears that v2.0 will not have any external dependencies.