/// <summary> /// Registers handlers and mediator types from the specified assemblies. /// </summary> /// <param name="container"><see cref="Container"/>.</param> /// <param name="configuration">The action used to configure the options.</param> /// <returns><see cref="Container"/>.</returns> public static Container AddMediatRAspNetCore( this Container container, Action <MediatRSimpleInjectorConfiguration>?configuration) { var serviceConfig = new MediatRSimpleInjectorConfiguration(); configuration?.Invoke(serviceConfig); var containerRef = container.SetupContainer(serviceConfig); containerRef.RegisterDecorator <IMediator, HttpRequestAbortedMediatorDecorator>(serviceConfig.Lifestyle); return(containerRef); }
/// <summary> /// Registers handlers and mediator types from the specified assemblies. /// </summary> /// <param name="container"><see cref="Container"/>.</param> /// <param name="configuration">The action used to configure the options.</param> /// <returns><see cref="Container"/>.</returns> public static Container AddMediatR( this Container container, Action <MediatRSimpleInjectorConfiguration>?configuration) { if (container is null) { throw new ArgumentNullException(nameof(container)); } var serviceConfig = new MediatRSimpleInjectorConfiguration(); configuration?.Invoke(serviceConfig); return(SetupContainer(container, serviceConfig)); }
internal static void RegisterBehaviors( Container container, MediatRSimpleInjectorConfiguration serviceConfig, Assembly[] uniqueAssemblies) { var processorBehaviors = new List <Type>(); RegisterBehaviorsAndProcessors( container, uniqueAssemblies, processorBehaviors, typeof(RequestPreProcessorBehavior <,>), typeof(IRequestPreProcessor <>), serviceConfig.RequestPreProcessorBehaviorEnabled); RegisterBehaviorsAndProcessors( container, uniqueAssemblies, processorBehaviors, typeof(RequestPostProcessorBehavior <,>), typeof(IRequestPostProcessor <,>), serviceConfig.RequestPostProcessorBehaviorEnabled); RegisterBehaviorsAndProcessors( container, uniqueAssemblies, processorBehaviors, typeof(RequestExceptionProcessorBehavior <,>), typeof(IRequestExceptionHandler <, ,>), serviceConfig.RequestExceptionProcessorBehaviorEnabled); RegisterBehaviorsAndProcessors( container, uniqueAssemblies, processorBehaviors, typeof(RequestExceptionActionProcessorBehavior <,>), typeof(IRequestExceptionAction <,>), serviceConfig.RequestExceptionActionProcessorBehaviorEnabled); processorBehaviors.AddRange(serviceConfig.PipelineBehaviorTypes); container.Collection.Register(typeof(IPipelineBehavior <,>), processorBehaviors); container.Collection.Register(typeof(IStreamPipelineBehavior <,>), serviceConfig.StreamPipelineBehaviorTypes); }
public void ShouldContainDefaultSettingsAfterCreation() { // Arrange var config = new MediatRSimpleInjectorConfiguration(); // Assert using (new AssertionScope()) { config.Lifestyle.Should().Be(Lifestyle.Singleton); config.MediatorImplementationType.Should().Be(typeof(Mediator)); config.MediatorInstanceCreator.Should().NotBeNull(); config.MediatorInstanceCreator().Should().BeNull(); config.RequestPreProcessorBehaviorEnabled.Should().BeFalse(); config.RequestPostProcessorBehaviorEnabled.Should().BeFalse(); config.RequestExceptionProcessorBehaviorEnabled.Should().BeFalse(); config.RequestExceptionActionProcessorBehaviorEnabled.Should().BeFalse(); config.AssembliesToScan.Should().BeEmpty(); config.PipelineBehaviorTypes.Should().BeEmpty(); } }
internal static Container SetupContainer( this Container container, MediatRSimpleInjectorConfiguration serviceConfig) { var uniqueAssemblies = serviceConfig.AssembliesToScan.Distinct().ToArray(); var allAssemblies = new List <Assembly> { typeof(IMediator).GetTypeInfo().Assembly }; allAssemblies.AddRange(uniqueAssemblies); var customMediatorInstance = serviceConfig.MediatorInstanceCreator(); if (customMediatorInstance is null) { container.Register( typeof(IMediator), serviceConfig.MediatorImplementationType, serviceConfig.Lifestyle); } else { container.Register( () => customMediatorInstance, serviceConfig.Lifestyle); } container.Register(typeof(IRequestHandler <,>), allAssemblies); container.Register(typeof(IStreamRequestHandler <,>), allAssemblies); RegisterNotifications(container, uniqueAssemblies); RegisterBehaviors(container, serviceConfig, uniqueAssemblies); container.Register(() => new ServiceFactory(container.GetInstance), Lifestyle.Singleton); return(container); }
public MediatRSimpleInjectorConfigurationTest() { _sut = new MediatRSimpleInjectorConfiguration(); }