in src/WebJobs.Script.WebHost/WebHostServiceCollectionExtensions.cs [271:386]
private static void AddLinuxContainerServices(this IServiceCollection services)
{
if (SystemEnvironment.Instance.IsLinuxConsumptionOnLegion())
{
services.AddLinuxConsumptionMetricsServices();
}
services.AddSingleton<IHostedService>(s =>
{
var environment = s.GetService<IEnvironment>();
if (environment.IsLinuxConsumptionOnAtlas())
{
var instanceManager = s.GetService<IInstanceManager>();
var logger = s.GetService<ILogger<AtlasContainerInitializationHostedService>>();
var startupContextProvider = s.GetService<StartupContextProvider>();
return new AtlasContainerInitializationHostedService(environment, instanceManager, logger, startupContextProvider);
}
else if (environment.IsFlexConsumptionSku() || environment.IsLinuxConsumptionOnLegion())
{
var instanceManager = s.GetService<IInstanceManager>();
var logger = s.GetService<ILogger<LegionContainerInitializationHostedService>>();
var startupContextProvider = s.GetService<StartupContextProvider>();
return new LegionContainerInitializationHostedService(environment, instanceManager, logger, startupContextProvider);
}
return NullHostedService.Instance;
});
services.AddSingleton<IMetricsPublisher>(s =>
{
var environment = s.GetService<IEnvironment>();
if (environment.IsLinuxConsumptionOnLegion())
{
var options = s.GetService<IOptions<LinuxConsumptionLegionMetricsPublisherOptions>>();
var logger = s.GetService<ILogger<LinuxContainerLegionMetricsPublisher>>();
var metricsTracker = s.GetService<ILinuxConsumptionMetricsTracker>();
var standbyOptions = s.GetService<IOptionsMonitor<StandbyOptions>>();
var serviceProvider = s.GetService<IServiceProvider>();
var hostingConfigOptions = s.GetService<IOptionsMonitor<FunctionsHostingConfigOptions>>();
return new LinuxContainerLegionMetricsPublisher(environment, standbyOptions, options, logger, new FileSystem(), metricsTracker, serviceProvider, hostingConfigOptions);
}
else if (environment.IsFlexConsumptionSku())
{
var options = s.GetService<IOptions<FlexConsumptionMetricsPublisherOptions>>();
var standbyOptions = s.GetService<IOptionsMonitor<StandbyOptions>>();
var logger = s.GetService<ILogger<FlexConsumptionMetricsPublisher>>();
var metricsProvider = s.GetService<IHostMetricsProvider>();
return new FlexConsumptionMetricsPublisher(environment, standbyOptions, options, logger, new FileSystem(), metricsProvider);
}
else if (environment.IsLinuxMetricsPublishingEnabled())
{
var logger = s.GetService<ILogger<LinuxContainerMetricsPublisher>>();
var standbyOptions = s.GetService<IOptionsMonitor<StandbyOptions>>();
var hostNameProvider = s.GetService<HostNameProvider>();
var hostingConfigOptions = s.GetService<IOptionsMonitor<FunctionsHostingConfigOptions>>();
return new LinuxContainerMetricsPublisher(environment, standbyOptions, logger, hostNameProvider, hostingConfigOptions);
}
return NullMetricsPublisher.Instance;
});
services.AddSingleton<IMeshServiceClient>(s =>
{
var environment = s.GetService<IEnvironment>();
if (environment.IsAnyLinuxConsumption())
{
var httpClientFactory = s.GetService<IHttpClientFactory>();
var logger = s.GetService<ILogger<MeshServiceClient>>();
return new MeshServiceClient(httpClientFactory, environment, logger);
}
return NullMeshServiceClient.Instance;
});
services.AddSingleton<LinuxContainerActivityPublisher>(s =>
{
var environment = s.GetService<IEnvironment>();
if (environment.IsAnyLinuxConsumption())
{
var logger = s.GetService<ILogger<LinuxContainerActivityPublisher>>();
var meshInitServiceClient = s.GetService<IMeshServiceClient>();
var standbyOptions = s.GetService<IOptionsMonitor<StandbyOptions>>();
return new LinuxContainerActivityPublisher(standbyOptions, meshInitServiceClient, environment, logger);
}
return null;
});
services.AddSingleton<IHostedService>(s =>
{
var environment = s.GetService<IEnvironment>();
if (environment.IsAnyLinuxConsumption())
{
return s.GetRequiredService<LinuxContainerActivityPublisher>();
}
return NullHostedService.Instance;
});
services.AddSingleton<ILinuxContainerActivityPublisher>(s =>
{
var environment = s.GetService<IEnvironment>();
if (environment.IsAnyLinuxConsumption())
{
return s.GetRequiredService<LinuxContainerActivityPublisher>();
}
return NullLinuxContainerActivityPublisher.Instance;
});
services.AddSingleton<IRunFromPackageHandler, RunFromPackageHandler>();
services.AddSingleton<IPackageDownloadHandler, PackageDownloadHandler>();
services.AddSingleton<IManagedIdentityTokenProvider, ManagedIdentityTokenProvider>();
services.AddSingleton<IUnZipHandler, UnZipHandler>();
services.AddSingleton<IBashCommandHandler, BashCommandHandler>();
}