From 28078649a7e120b7292b1f4f3cbf699e43b10d6f Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 13 Jul 2019 22:31:40 -0500 Subject: [PATCH] cleanup some DI registration --- .../AgentTelemetryClient.cs | 5 +- .../QuickPulseTelemetryModuleBuilder.cs | 19 ++++--- .../ServiceCollectionExtensions.cs | 25 +++------ .../ServiceCollectionExtensions.cs | 52 +++++++++---------- 4 files changed, 47 insertions(+), 54 deletions(-) diff --git a/src/FilterLists.Agent/Infrastructure/ApplicationInsights/AgentTelemetryClient.cs b/src/FilterLists.Agent/Infrastructure/ApplicationInsights/AgentTelemetryClient.cs index 2fc199ac7..a25b77170 100644 --- a/src/FilterLists.Agent/Infrastructure/ApplicationInsights/AgentTelemetryClient.cs +++ b/src/FilterLists.Agent/Infrastructure/ApplicationInsights/AgentTelemetryClient.cs @@ -1,15 +1,14 @@ using System; using System.Threading; using Microsoft.ApplicationInsights; -using Microsoft.ApplicationInsights.Extensibility; namespace FilterLists.Agent.Infrastructure.ApplicationInsights { public class AgentTelemetryClient : IDisposable { - public AgentTelemetryClient(TelemetryConfiguration telemetryConfiguration) + public AgentTelemetryClient(string instrumentationKey) { - TelemetryClient = new TelemetryClient(telemetryConfiguration); + TelemetryClient = new TelemetryClient {InstrumentationKey = instrumentationKey}; } public TelemetryClient TelemetryClient { get; } diff --git a/src/FilterLists.Agent/Infrastructure/ApplicationInsights/QuickPulseTelemetryModuleBuilder.cs b/src/FilterLists.Agent/Infrastructure/ApplicationInsights/QuickPulseTelemetryModuleBuilder.cs index 0f378dbbe..1be39f696 100644 --- a/src/FilterLists.Agent/Infrastructure/ApplicationInsights/QuickPulseTelemetryModuleBuilder.cs +++ b/src/FilterLists.Agent/Infrastructure/ApplicationInsights/QuickPulseTelemetryModuleBuilder.cs @@ -3,12 +3,19 @@ namespace FilterLists.Agent.Infrastructure.ApplicationInsights { - public static class QuickPulseTelemetryModuleBuilder + public class QuickPulseTelemetryModuleBuilder { - public static QuickPulseTelemetryModule Build(TelemetryConfiguration telemetryConfiguration) + private readonly TelemetryConfiguration _telemetryConfiguration; + + public QuickPulseTelemetryModuleBuilder(TelemetryConfiguration telemetryConfiguration) + { + _telemetryConfiguration = telemetryConfiguration; + } + + public QuickPulseTelemetryModule Build() { QuickPulseTelemetryProcessor processor = null; - telemetryConfiguration.TelemetryProcessorChainBuilder + _telemetryConfiguration.TelemetryProcessorChainBuilder .Use(next => { processor = new QuickPulseTelemetryProcessor(next); @@ -16,11 +23,11 @@ public static QuickPulseTelemetryModule Build(TelemetryConfiguration telemetryCo }) .Build(); var quickPulseTelemetryModule = new QuickPulseTelemetryModule(); - quickPulseTelemetryModule.Initialize(telemetryConfiguration); + quickPulseTelemetryModule.Initialize(_telemetryConfiguration); quickPulseTelemetryModule.RegisterTelemetryProcessor(processor); - foreach (var telemetryProcessor in telemetryConfiguration.TelemetryProcessors) + foreach (var telemetryProcessor in _telemetryConfiguration.TelemetryProcessors) if (telemetryProcessor is ITelemetryModule telemetryModule) - telemetryModule.Initialize(telemetryConfiguration); + telemetryModule.Initialize(_telemetryConfiguration); return quickPulseTelemetryModule; } } diff --git a/src/FilterLists.Agent/Infrastructure/ApplicationInsights/ServiceCollectionExtensions.cs b/src/FilterLists.Agent/Infrastructure/ApplicationInsights/ServiceCollectionExtensions.cs index 951d8c63c..1ae672d63 100644 --- a/src/FilterLists.Agent/Infrastructure/ApplicationInsights/ServiceCollectionExtensions.cs +++ b/src/FilterLists.Agent/Infrastructure/ApplicationInsights/ServiceCollectionExtensions.cs @@ -1,32 +1,23 @@ using FilterLists.Agent.AppSettings; using Microsoft.ApplicationInsights.Extensibility; +using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; namespace FilterLists.Agent.Infrastructure.ApplicationInsights { public static class ServiceCollectionExtensions { - public static void AddApplicationInsights(this IServiceCollection services) + public static void AddApplicationInsights(this IServiceCollection services, + ApplicationInsightsSettings applicationInsightsSettings) { - services.AddTransient(b => - { - var applicationInsightsSettings = b.GetService>().Value; - return new TelemetryConfiguration - { - InstrumentationKey = applicationInsightsSettings.InstrumentationKey - }; - }); services.AddSingleton(b => { - var telemetryConfiguration = b.GetService(); - return new AgentTelemetryClient(telemetryConfiguration); - }); - services.AddSingleton(b => - { - var telemetryConfiguration = b.GetService(); - return QuickPulseTelemetryModuleBuilder.Build(telemetryConfiguration); + var telemetryConfiguration = new TelemetryConfiguration(applicationInsightsSettings.InstrumentationKey); + return new QuickPulseTelemetryModuleBuilder(telemetryConfiguration).Build(); }); + + // init never resolved singleton in intermediate ServiceProvider + services.BuildServiceProvider().GetService(); } } } \ No newline at end of file diff --git a/src/FilterLists.Agent/Infrastructure/DependencyInjection/ServiceCollectionExtensions.cs b/src/FilterLists.Agent/Infrastructure/DependencyInjection/ServiceCollectionExtensions.cs index 8dc4edbad..da5437f82 100644 --- a/src/FilterLists.Agent/Infrastructure/DependencyInjection/ServiceCollectionExtensions.cs +++ b/src/FilterLists.Agent/Infrastructure/DependencyInjection/ServiceCollectionExtensions.cs @@ -1,6 +1,7 @@ using System; using CommandLine; using FilterLists.Agent.AppSettings; +using FilterLists.Agent.Extensions; using FilterLists.Agent.Infrastructure.ApplicationInsights; using FilterLists.Agent.Infrastructure.Disk; using FilterLists.Agent.Infrastructure.FilterListsApi; @@ -8,7 +9,6 @@ using FilterLists.Agent.Infrastructure.Polly; using FilterLists.Agent.Infrastructure.Web; using MediatR; -using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.QuickPulse; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Serilog; @@ -17,10 +17,18 @@ namespace FilterLists.Agent.Infrastructure.DependencyInjection { public static class ServiceCollectionExtensions { + private static IConfigurationRoot Configuration { get; } = new ConfigurationBuilder() + .AddEnvironmentVariables() + .AddJsonFile("appsettings.json", true, true) +#if DEBUG + .AddJsonFile("appsettings.Development.json", true, true) +#endif + .Build(); + public static void ConfigureServices(this IServiceCollection services) { - services.AddConfiguration(); - services.AddApplicationInsights(); + services.ConfigureSettings(); + services.AddApplicationInsights(Configuration.GetSettings()); services.AddLogging(); services.AddLocalization(); services.AddTransient(); @@ -32,43 +40,31 @@ public static void ConfigureServices(this IServiceCollection services) services.AddWebServices(); } - private static void AddConfiguration(this IServiceCollection services) + private static void ConfigureSettings(this IServiceCollection services) { - var config = new ConfigurationBuilder() - .AddEnvironmentVariables() - .AddJsonFile("appsettings.json", true, true) -#if DEBUG - .AddJsonFile("appsettings.Development.json", true, true) -#endif - .Build(); - services.ConfigureCustom(config); - services.ConfigureCustom(config); - services.ConfigureCustom(config); - services.ConfigureCustom(config); - services.ConfigureCustom(config); + services.Configure(); + services.Configure(); + services.Configure(); + services.Configure(); + services.Configure(); } - private static void ConfigureCustom(this IServiceCollection services, IConfiguration configuration) - where TSettings : class + private static void Configure(this IServiceCollection services) where TSettings : class { - services.Configure( - configuration.GetSection(typeof(TSettings).Name.Replace("Settings", "", StringComparison.Ordinal))); + services.Configure(Configuration.GetSection()); } private static void AddLogging(this IServiceCollection services) { services.AddLogging(b => { - var serviceProvider = b.Services.BuildServiceProvider(); - - // init never-resolved singleton - serviceProvider.GetService(); - - var telemetryClient = serviceProvider.GetService().TelemetryClient; - b.AddSerilog(new LoggerConfiguration() + var instrumentationKey = Configuration.GetSettings().InstrumentationKey; + var telemetryClient = new AgentTelemetryClient(instrumentationKey).TelemetryClient; + var logger = new LoggerConfiguration() .WriteTo.Console() .WriteTo.ApplicationInsights(telemetryClient, TelemetryConverter.Traces) - .CreateLogger()); + .CreateLogger(); + b.AddSerilog(logger); }); } }