Beispiel #1
0
    /// <summary>
    /// Adds the softaware CQS infrastructure and registers all required instances in the SimpleInjector container.
    /// </summary>
    /// <param name="container">The SimpleInjector container.</param>
    /// <param name="softawareCqsTypesBuilderAction">The types builder for registering assemblies from where to find <see cref="IRequestHandler{TRequest, TResult}"/> instances.</param>
    /// <returns>The softaware CQS builder.</returns>
    public static SoftawareCqsBuilder AddSoftawareCqs(
        this Container container,
        Action <SoftawareCqsTypesBuilder> softawareCqsTypesBuilderAction)
    {
        container.RegisterInstance <IRequestProcessor>(new DynamicRequestProcessor(container));

        var typesBuilder = new SoftawareCqsTypesBuilder();

        softawareCqsTypesBuilderAction.Invoke(typesBuilder);

        container.Register(typeof(IRequestHandler <,>), typesBuilder.RegisteredAssemblies);

        return(new SoftawareCqsBuilder(container));
    }
Beispiel #2
0
    /// <summary>
    /// Registers the fluent validation request handler decorators as well as all validators from the specified assemblies.
    /// </summary>
    /// <param name="decoratorBuilder">The CQS decorator builder.</param>
    /// <param name="validatorTypesBuilderAction">The types builder for registering assemblies from where to find <see cref="IValidator{T}"/> instances.</param>
    /// <returns>The CQS decorator builder.</returns>
    public static SoftawareCqsDecoratorBuilder AddFluentValidationDecorators(
        this SoftawareCqsDecoratorBuilder decoratorBuilder,
        Action <SoftawareCqsTypesBuilder> validatorTypesBuilderAction)
    {
        var typesBuilder = new SoftawareCqsTypesBuilder();

        validatorTypesBuilderAction.Invoke(typesBuilder);

        // Register all fluent validators which are available in the specified assemblies.
        decoratorBuilder.Services
        .Scan(scan => scan
              .FromAssemblies(typesBuilder.RegisteredAssemblies)
              .AddClasses(classes => classes.AssignableTo(typeof(IValidator <>)))
              .AsImplementedInterfaces()
              .WithTransientLifetime());

        decoratorBuilder.AddRequestHandlerDecorator(typeof(FluentValidationRequestHandlerDecorator <,>));

        return(decoratorBuilder);
    }
Beispiel #3
0
    /// <summary>
    /// Adds the softaware CQS infrastructure and registers all required instances in the <paramref name="services"/> collection.
    /// </summary>
    /// <param name="services">The service collection.</param>
    /// <param name="softawareCqsTypesBuilderAction">The types builder for registering assemblies from where to find <see cref="IRequestHandler{TRequest, TResult}"/> instances.</param>
    /// <returns>The softaware CQS builder.</returns>
    public static SoftawareCqsBuilder AddSoftawareCqs(
        this IServiceCollection services,
        Action <SoftawareCqsTypesBuilder> softawareCqsTypesBuilderAction)
    {
        var typesBuilder = new SoftawareCqsTypesBuilder();

        softawareCqsTypesBuilderAction.Invoke(typesBuilder);

        services
        .Scan(scan => scan
              .FromAssemblies(typesBuilder.RegisteredAssemblies)
              .AddClasses(classes => classes.AssignableTo(typeof(IRequestHandler <,>))
                          .Where(t => !t.IsDecorator()))
              .AsImplementedInterfaces()
              .WithTransientLifetime());

        services.AddTransient <IRequestProcessor, DynamicRequestProcessor>();

        return(new SoftawareCqsBuilder(services));
    }