Use DI helper to create the processor
This commit is contained in:
Родитель
2fb7913974
Коммит
8584431481
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче