MediatR.SimpleInjector
Instead copy following code in every project (main project, test project, ....):
private static void RegisterAssemblies(Container container)
{
var assemblies = GetAssemblies();
container.RegisterSingleton<IMediator, Mediator>();
container.Register(typeof(IRequestHandler<,>), assemblies);
container.Register(typeof(IAsyncRequestHandler<,>), assemblies);
container.Register(typeof(ICancellableAsyncRequestHandler<>), assemblies);
container.RegisterCollection(typeof(INotificationHandler<>), assemblies);
container.RegisterCollection(typeof(IAsyncNotificationHandler<>), assemblies);
container.RegisterCollection(typeof(ICancellableAsyncNotificationHandler<>), assemblies);
container.RegisterCollection(typeof(IPipelineBehavior<,>), assemblies);
container.Register(() => Mapper.Instance);
container.RegisterSingleton(new SingleInstanceFactory(container.GetInstance));
container.RegisterSingleton(new MultiInstanceFactory(container.GetAllInstances));
}
private static IEnumerable<Assembly> GetAssemblies()
{
yield return typeof(IMediator).GetTypeInfo().Assembly;
yield return typeof(TestCommand).GetTypeInfo().Assembly;
}
Just use MediatR.SimpleInjector as following:
public static Container RegisterMediator(this Container container)
{
var assemblies = GetAssemblies();
return container.BuildMediator(assemblies);
}
private static IEnumerable<Assembly> GetAssemblies()
{
yield return typeof(TestCommand).GetTypeInfo().Assembly;
}