mirror of
https://github.com/collinbarrett/FilterLists.git
synced 2026-03-11 09:04:27 +00:00
cleanup some DI registration
This commit is contained in:
parent
9bdeb4b9a5
commit
28078649a7
4 changed files with 47 additions and 54 deletions
|
|
@ -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; }
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue