public void Configure()

in NETCORE/src/Shared/Implementation/TelemetryConfigurationOptionsSetup.cs [71:287]


        public void Configure(TelemetryConfiguration configuration)
        {
            try
            {
                if (this.applicationInsightsServiceOptions.InstrumentationKey != null)
                {
                    configuration.InstrumentationKey = this.applicationInsightsServiceOptions.InstrumentationKey;
                }

                if (this.telemetryModuleConfigurators.Any())
                {
                    foreach (ITelemetryModuleConfigurator telemetryModuleConfigurator in this.telemetryModuleConfigurators)
                    {
                        ITelemetryModule telemetryModule = this.modules.FirstOrDefault((module) => module.GetType() == telemetryModuleConfigurator.TelemetryModuleType);
                        if (telemetryModule != null)
                        {
                            telemetryModuleConfigurator.Configure(telemetryModule, this.applicationInsightsServiceOptions);
                        }
                        else
                        {
#if AI_ASPNETCORE_WEB
                            AspNetCoreEventSource.Instance.UnableToFindModuleToConfigure(telemetryModuleConfigurator.TelemetryModuleType.ToString());
#else
                            WorkerServiceEventSource.Instance.UnableToFindModuleToConfigure(telemetryModuleConfigurator.TelemetryModuleType.ToString());
#endif
                        }
                    }
                }

                if (this.telemetryProcessorFactories.Any())
                {
                    foreach (ITelemetryProcessorFactory processorFactory in this.telemetryProcessorFactories)
                    {
                        configuration.DefaultTelemetrySink.TelemetryProcessorChainBuilder.Use(processorFactory.Create);
                    }
                }

                // Fallback to default channel (InMemoryChannel) created by base sdk if no channel is found in DI
                configuration.TelemetryChannel = this.telemetryChannel ?? configuration.TelemetryChannel;
                (configuration.TelemetryChannel as ITelemetryModule)?.Initialize(configuration);

                this.AddAutoCollectedMetricExtractor(configuration);
                this.AddQuickPulse(configuration);
                this.AddSampling(configuration);
                this.DisableHeartBeatIfConfigured();

                configuration.DefaultTelemetrySink.TelemetryProcessorChainBuilder.Build();
                configuration.TelemetryProcessorChainBuilder.Build();

                if (this.applicationInsightsServiceOptions.DeveloperMode != null)
                {
                    configuration.TelemetryChannel.DeveloperMode = this.applicationInsightsServiceOptions.DeveloperMode;
                }

                if (this.applicationInsightsServiceOptions.EndpointAddress != null)
                {
                    configuration.TelemetryChannel.EndpointAddress = this.applicationInsightsServiceOptions.EndpointAddress;
                }

                // Need to set connection string before calling Initialize() on the Modules and Processors.
                if (this.applicationInsightsServiceOptions.ConnectionString != null)
                {
                    configuration.ConnectionString = this.applicationInsightsServiceOptions.ConnectionString;
                }

                foreach (ITelemetryInitializer initializer in this.initializers)
                {
                    configuration.TelemetryInitializers.Add(initializer);
                }

                // Find the DiagnosticsTelemetryModule, this is needed to initialize AzureInstanceMetadataTelemetryModule and AppServicesHeartbeatTelemetryModule.
                DiagnosticsTelemetryModule diagModule =
                    (this.applicationInsightsServiceOptions.EnableDiagnosticsTelemetryModule && this.applicationInsightsServiceOptions.EnableHeartbeat)
                    ? this.modules.OfType<DiagnosticsTelemetryModule>().FirstOrDefault()
                    : null;

                // Checks ApplicationInsightsServiceOptions and disable TelemetryModules if explicitly disabled.
                foreach (ITelemetryModule module in this.modules)
                {
                    // If any of the modules are disabled explicitly using aioptions,
                    // do not initialize them and dispose if disposable.
                    // The option of not adding a module to DI if disabled
                    // cannot be done to maintain backward compatibility.
                    // So this approach of adding all modules to DI, but selectively
                    // disable those modules which user has disabled is chosen.

                    if (module is DiagnosticsTelemetryModule)
                    {
                        if (!this.applicationInsightsServiceOptions.EnableDiagnosticsTelemetryModule)
                        {
                            DisposeIfDisposable(module);
                            continue;
                        }
                    }

                    // DependencyTrackingTelemetryModule
                    if (module is DependencyTrackingTelemetryModule)
                    {
                        if (!this.applicationInsightsServiceOptions.EnableDependencyTrackingTelemetryModule)
                        {
                            DisposeIfDisposable(module);
                            continue;
                        }
                    }

#if AI_ASPNETCORE_WEB
                    // RequestTrackingTelemetryModule
                    if (module is RequestTrackingTelemetryModule)
                    {
                        if (!this.applicationInsightsServiceOptions.EnableRequestTrackingTelemetryModule)
                        {
                            DisposeIfDisposable(module);
                            continue;
                        }
                    }
#endif

                    // EventCounterCollectionModule
                    if (module is EventCounterCollectionModule)
                    {
                        if (!this.applicationInsightsServiceOptions.EnableEventCounterCollectionModule)
                        {
                            DisposeIfDisposable(module);
                            continue;
                        }
                    }

                    // PerformanceCollectorModule
                    if (module is PerformanceCollectorModule)
                    {
                        if (!this.applicationInsightsServiceOptions.EnablePerformanceCounterCollectionModule)
                        {
                            DisposeIfDisposable(module);
                            continue;
                        }
                    }

                    // AppServicesHeartbeatTelemetryModule
                    if (module is AppServicesHeartbeatTelemetryModule appServicesHeartbeatTelemetryModule)
                    {
                        if (!this.applicationInsightsServiceOptions.EnableAppServicesHeartbeatTelemetryModule)
                        {
                            DisposeIfDisposable(module);
                            continue;
                        }
                        else if (diagModule != null)
                        {
                            // diagModule is set to Null above if (applicationInsightsServiceOptions.EnableDiagnosticsTelemetryModule || this.applicationInsightsServiceOptions.EnableHeartbeat) == false.
                            appServicesHeartbeatTelemetryModule.HeartbeatPropertyManager = diagModule;
                        }
                    }

                    // AzureInstanceMetadataTelemetryModule
                    if (module is AzureInstanceMetadataTelemetryModule azureInstanceMetadataTelemetryModule)
                    {
                        if (!this.applicationInsightsServiceOptions.EnableAzureInstanceMetadataTelemetryModule)
                        {
                            DisposeIfDisposable(module);
                            continue;
                        }
                        else if (diagModule != null)
                        {
                            // diagModule is set to Null above if (applicationInsightsServiceOptions.EnableDiagnosticsTelemetryModule || this.applicationInsightsServiceOptions.EnableHeartbeat) == false.
                            azureInstanceMetadataTelemetryModule.HeartbeatPropertyManager = diagModule;
                        }
                    }

                    // QuickPulseTelemetryModule
                    if (module is QuickPulseTelemetryModule)
                    {
                        if (!this.applicationInsightsServiceOptions.EnableQuickPulseMetricStream)
                        {
                            DisposeIfDisposable(module);
                            continue;
                        }
                    }

                    try
                    {
                        module.Initialize(configuration);
                    }
                    catch (Exception ex)
                    {
#if AI_ASPNETCORE_WEB
                        AspNetCoreEventSource.Instance.TelemetryModuleInitialziationSetupFailure(module.GetType().FullName, ex.ToInvariantString());
#else
                        WorkerServiceEventSource.Instance.TelemetryModuleInitialziationSetupFailure(module.GetType().FullName, ex.ToInvariantString());
#endif
                    }
                }

                foreach (ITelemetryProcessor processor in configuration.TelemetryProcessors)
                {
                    if (processor is ITelemetryModule module)
                    {
                        module.Initialize(configuration);
                    }
                }

                // Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule depends on this nullable configuration to support Correlation.
                configuration.ApplicationIdProvider = this.applicationIdProvider;

#if AI_ASPNETCORE_WEB
                AspNetCoreEventSource.Instance.LogInformational("Successfully configured TelemetryConfiguration.");
#else
                WorkerServiceEventSource.Instance.LogInformational("Successfully configured TelemetryConfiguration.");
#endif
            }
            catch (Exception ex)
            {
#if AI_ASPNETCORE_WEB
                AspNetCoreEventSource.Instance.TelemetryConfigurationSetupFailure(ex.ToInvariantString());
#else
                WorkerServiceEventSource.Instance.TelemetryConfigurationSetupFailure(ex.ToInvariantString());
#endif
            }
        }