/// <summary> /// Adds a configuration callback to the builder that is used to configure the receiving endpoint. /// </summary> /// <param name="builder"><see cref="IReceiveEndpointBuilder{THost,TEndpoint}"/></param> /// <param name="endpointConfigurator">The configuration callback to configure the receiving endpoint.</param> public static void AddConfigurator <THost, TEndpoint>(this IReceiveEndpointBuilder <THost, TEndpoint> builder, Action <TEndpoint, IServiceProvider> endpointConfigurator) where THost : class, IHost where TEndpoint : class, IReceiveEndpointConfigurator { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (endpointConfigurator == null) { throw new ArgumentNullException(nameof(endpointConfigurator)); } builder.AddConfigurator((host, endpoint, serviceProvider) => endpointConfigurator(endpoint, serviceProvider)); }
/// <summary> /// Adds a configuration callback to the builder that is used to connect a consumer to the receiving endpoint. /// </summary> /// <typeparam name="TConsumer">The type of the consumer.</typeparam> /// <param name="builder"><see cref="IReceiveEndpointBuilder"/></param> /// <param name="consumerConfigurator">The configuration callback to configure the consumer.</param> public static void AddConsumer <TConsumer>(this IReceiveEndpointBuilder builder, Action <IConsumerConfigurator <TConsumer>, IServiceProvider> consumerConfigurator) where TConsumer : class, IConsumer { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.Services.TryAddTransient <TConsumer>(); builder.AddConfigurator((host, endpoint, serviceProvider) => { var consumerFactory = serviceProvider.GetRequiredService <IConsumerFactory <TConsumer> >(); endpoint.Consumer(consumerFactory, consumerConfigure => consumerConfigurator?.Invoke(consumerConfigure, serviceProvider)); }); }
public void AddConfigurator_GivenNonGeneric_ThenValid() { var services = new ServiceCollection(); var receiveEndpointBuilder = new ReceiveEndpointBuilder <IHost, IReceiveEndpointConfigurator>(services); var mockHost = new Mock <IHost>(MockBehavior.Strict); var mockServiceProvider = new Mock <IServiceProvider>(MockBehavior.Strict); var mockReceiveEndpointConfigurator = new Mock <IReceiveEndpointConfigurator>(MockBehavior.Strict); var configuratorWasCalled = false; IReceiveEndpointBuilder receiveEndpointBuilderNonGeneric = receiveEndpointBuilder; receiveEndpointBuilderNonGeneric.AddConfigurator((host, configurator, serviceProvider) => { configuratorWasCalled = true; Assert.Same(mockHost.Object, host); Assert.Same(mockServiceProvider.Object, serviceProvider); Assert.Same(mockReceiveEndpointConfigurator.Object, configurator); }); receiveEndpointBuilder.Configure(mockHost.Object, mockReceiveEndpointConfigurator.Object, mockServiceProvider.Object); Assert.True(configuratorWasCalled); }