Example #1
0
    /// <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);
    }
Example #2
0
    /// <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));
    }
Example #3
0
    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();
        }
    }
Example #5
0
    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();
 }