Exemple #1
0
        /// <summary>
        ///     Replaces the Kafka connectivity based on Confluent.Kafka with a mocked in-memory message broker that
        ///     <b>more or less</b> replicates the Kafka behavior.
        /// </summary>
        /// <param name="services">
        ///     The <see cref="Microsoft.Extensions.DependencyInjection.IServiceCollection" /> to add the service
        ///     to.
        /// </param>
        /// <param name="optionsAction">
        ///     Additional options (such as topics and partitions settings).
        /// </param>
        /// <returns>
        ///     The <see cref="IServiceCollection" /> so that additional calls can be chained.
        /// </returns>
        public static IServiceCollection UseMockedKafka(this IServiceCollection services, Action <IMockedKafkaOptionsBuilder>?optionsAction = null)
        {
            services
            .RemoveAll <IConfluentConsumerBuilder>()
            .RemoveAll <IConfluentProducerBuilder>()
            .AddSingleton <IMockedKafkaOptions>(new MockedKafkaOptions())
            .AddTransient <IConfluentProducerBuilder, MockedConfluentProducerBuilder>()
            .AddTransient <IConfluentConsumerBuilder, MockedConfluentConsumerBuilder>()
            .AddSingleton <IInMemoryTopicCollection, InMemoryTopicCollection>()
            .AddSingleton <IKafkaTestingHelper, KafkaTestingHelper>();

            var optionsBuilder = new MockedKafkaOptionsBuilder(services);

            optionsAction?.Invoke(optionsBuilder);

            return(services);
        }
        /// <summary>
        ///     Replaces the Kafka connectivity based on Confluent.Kafka with a mocked in-memory message broker that
        ///     <b>more or less</b> replicates the Kafka behavior.
        /// </summary>
        /// <param name="builder">
        ///     The <see cref="ISilverbackBuilder" />.
        /// </param>
        /// <param name="optionsAction">
        ///     Configures the mock options.
        /// </param>
        /// <returns>
        ///     The <see cref="ISilverbackBuilder" /> so that additional calls can be chained.
        /// </returns>
        public static ISilverbackBuilder UseMockedKafka(
            this ISilverbackBuilder builder,
            Action <IMockedKafkaOptionsBuilder>?optionsAction = null)
        {
            Check.NotNull(builder, nameof(builder));

            builder.Services
            .RemoveAll <IConfluentConsumerBuilder>()
            .RemoveAll <IConfluentProducerBuilder>()
            .AddSingleton <IMockedKafkaOptions>(new MockedKafkaOptions())
            .AddTransient <IConfluentProducerBuilder, MockedConfluentProducerBuilder>()
            .AddTransient <IConfluentConsumerBuilder, MockedConfluentConsumerBuilder>()
            .AddSingleton <IInMemoryTopicCollection, InMemoryTopicCollection>()
            .AddSingleton <IKafkaTestingHelper, KafkaTestingHelper>();

            var optionsBuilder = new MockedKafkaOptionsBuilder(builder.Services);

            optionsAction?.Invoke(optionsBuilder);

            return(builder);
        }