src/Microsoft.Azure.WebJobs.Extensions.Kafka/Config/KafkaWebJobsBuilderExtensions.cs (46 lines of code) (raw):

// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for license information. using Microsoft.Azure.WebJobs.Host.Scale; using Microsoft.Extensions.DependencyInjection; using System; namespace Microsoft.Azure.WebJobs.Extensions.Kafka { public static class KafkaWebJobsBuilderExtensions { /// <summary> /// Adds the Kafka extensions to the provider <see cref="IWebJobsBuilder"/>. /// </summary> public static IWebJobsBuilder AddKafka(this IWebJobsBuilder builder) => AddKafka(builder, o => { }); /// <summary> /// Adds the Kafka extensions to the provider <see cref="IWebJobsBuilder"/>. /// </summary> public static IWebJobsBuilder AddKafka(this IWebJobsBuilder builder, Action<KafkaOptions> configure) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (configure == null) { throw new ArgumentNullException(nameof(configure)); } builder.AddExtension<KafkaExtensionConfigProvider>() .BindOptions<KafkaOptions>(); builder.Services.Configure<KafkaOptions>(options => { configure(options); }); builder.Services.AddSingleton<IKafkaProducerFactory, KafkaProducerFactory>(); return builder; } internal static IWebJobsBuilder AddKafkaScaleForTrigger(this IWebJobsBuilder builder, TriggerMetadata triggerMetadata) { IServiceProvider serviceProvider = null; var scalerProvider = new Lazy<KafkaScalerProvider>(() => new KafkaScalerProvider(serviceProvider, triggerMetadata)); builder.Services.AddSingleton((Func<IServiceProvider, IScaleMonitorProvider>)delegate (IServiceProvider resolvedServiceProvider) { serviceProvider = serviceProvider ?? resolvedServiceProvider; return scalerProvider.Value; }); builder.Services.AddSingleton((Func<IServiceProvider, ITargetScalerProvider>)delegate (IServiceProvider resolvedServiceProvider) { serviceProvider = serviceProvider ?? resolvedServiceProvider; return scalerProvider.Value; }); return builder; } } }