cleanup some DI registration

This commit is contained in:
Collin M. Barrett 2019-07-13 22:31:40 -05:00
parent 9bdeb4b9a5
commit 28078649a7
4 changed files with 47 additions and 54 deletions

View file

@ -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; }

View file

@ -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;
}
}

View file

@ -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<IOptions<ApplicationInsightsSettings>>().Value;
return new TelemetryConfiguration
{
InstrumentationKey = applicationInsightsSettings.InstrumentationKey
};
});
services.AddSingleton(b =>
{
var telemetryConfiguration = b.GetService<TelemetryConfiguration>();
return new AgentTelemetryClient(telemetryConfiguration);
});
services.AddSingleton(b =>
{
var telemetryConfiguration = b.GetService<TelemetryConfiguration>();
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<QuickPulseTelemetryModule>();
}
}
}

View file

@ -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<ApplicationInsightsSettings>());
services.AddLogging();
services.AddLocalization();
services.AddTransient<Parser>();
@ -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<ApplicationInsightsSettings>(config);
services.ConfigureCustom<ArchiveSettings>(config);
services.ConfigureCustom<ConnectionStringSettings>(config);
services.ConfigureCustom<FilterListsApiSettings>(config);
services.ConfigureCustom<GitHubSettings>(config);
services.Configure<ApplicationInsightsSettings>();
services.Configure<ArchiveSettings>();
services.Configure<ConnectionStringSettings>();
services.Configure<FilterListsApiSettings>();
services.Configure<GitHubSettings>();
}
private static void ConfigureCustom<TSettings>(this IServiceCollection services, IConfiguration configuration)
where TSettings : class
private static void Configure<TSettings>(this IServiceCollection services) where TSettings : class
{
services.Configure<TSettings>(
configuration.GetSection(typeof(TSettings).Name.Replace("Settings", "", StringComparison.Ordinal)));
services.Configure<TSettings>(Configuration.GetSection<TSettings>());
}
private static void AddLogging(this IServiceCollection services)
{
services.AddLogging(b =>
{
var serviceProvider = b.Services.BuildServiceProvider();
// init never-resolved singleton
serviceProvider.GetService<QuickPulseTelemetryModule>();
var telemetryClient = serviceProvider.GetService<AgentTelemetryClient>().TelemetryClient;
b.AddSerilog(new LoggerConfiguration()
var instrumentationKey = Configuration.GetSettings<ApplicationInsightsSettings>().InstrumentationKey;
var telemetryClient = new AgentTelemetryClient(instrumentationKey).TelemetryClient;
var logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.ApplicationInsights(telemetryClient, TelemetryConverter.Traces)
.CreateLogger());
.CreateLogger();
b.AddSerilog(logger);
});
}
}