1
0
Форкнуть 0

Use DI helper to create the processor

This commit is contained in:
Paul Harrington 2017-07-20 13:42:29 -07:00
Родитель 2fb7913974
Коммит 8584431481
2 изменённых файлов: 14 добавлений и 2 удалений

Просмотреть файл

@ -190,7 +190,7 @@ namespace Microsoft.Extensions.DependencyInjection
/// </returns>
public static IServiceCollection AddApplicationInsightsTelemetryProcessor<T>(this IServiceCollection services) where T : ITelemetryProcessor
{
return services.AddSingleton<ITelemetryProcessorFactory>(new TelemetryProcessorFactory<T>());
return services.AddSingleton<ITelemetryProcessorFactory>(serviceProvider => new TelemetryProcessorFactory<T>(serviceProvider));
}
/// <summary>

Просмотреть файл

@ -2,6 +2,7 @@
{
using System;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Extensions.DependencyInjection;
/// <summary>
/// A generic factory for telemetry processors of a given type.
@ -9,6 +10,17 @@
/// <typeparam name="T">The type of telemetry processor created by this factory.</typeparam>
internal class TelemetryProcessorFactory<T> : ITelemetryProcessorFactory where T : ITelemetryProcessor
{
private readonly IServiceProvider serviceProvider;
/// <summary>
/// Constructs an instance of the factory.
/// </summary>
/// <param name="serviceProvider">The service provider.</param>
public TelemetryProcessorFactory(IServiceProvider serviceProvider)
{
this.serviceProvider = serviceProvider;
}
/// <summary>
/// Creates an instance of the telemetry processor, passing the
/// next <see cref="ITelemetryProcessor"/> in the call chain to
@ -16,7 +28,7 @@
/// </summary>
public ITelemetryProcessor Create(ITelemetryProcessor next)
{
return (ITelemetryProcessor)Activator.CreateInstance(typeof(T), args: next);
return ActivatorUtilities.CreateInstance<T>(serviceProvider, next);
}
}
}