/// <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)); }
/// <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); }
/// <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)); }