/// <summary> /// Adds <c>ETW</c> in-process telemetry session services to the service collection. /// </summary> /// <param name="services">A <see cref="IServiceCollection"/> instance.</param> /// <param name="configuration">A <see cref="IConfiguration"/> instance.</param> /// <returns>The provided <see cref="IServiceCollection"/> instance.</returns> public static IServiceCollection AddInProcessTelemetrySession( this IServiceCollection services, IConfiguration configuration) { if (services == null) { throw new ArgumentNullException(nameof(services)); } if (configuration == null) { throw new ArgumentNullException(nameof(configuration)); } return(services .AddTracingCore(configuration) .Configure <SessionConfiguration>(configuration.GetSection("Tracing")) .AddSingleton <IProvidersDescriptor, SessionConfigurationProvidersDescriptor>() .AddSingleton(p => { SessionConfiguration config = p .GetRequiredService <IOptions <SessionConfiguration> >()?.Value; IEnumerable <ITelemetryEventTransmitter> eventTransmitters = p.GetServices <ITelemetryEventTransmitter>(); ITelemetrySession session = InProcessTelemetrySession .Create(config, p.GetServices <IProvidersDescriptor>()); foreach (ITelemetryEventTransmitter transmitter in eventTransmitters) { session.Attach(transmitter); } return session; })); }
/// <summary> /// Creates a new instance of <see cref="InProcessTelemetrySession"/>. /// </summary> /// <param name="applicationId">An unique application id.</param> /// <param name="level">A level of severity.</param> /// <param name="providersDescriptors"> /// A collection of provider descriptors. /// </param> /// <returns> /// A new instance of <see cref="InProcessTelemetrySession"/>. /// </returns> public static InProcessTelemetrySession Create(int applicationId, EventLevel level, IEnumerable <IProvidersDescriptor> providersDescriptors) { InProcessTelemetrySession session = new InProcessTelemetrySession( applicationId, level, providersDescriptors); session.FindAndActivateProviders(); session.RegisterAssemblyLoadCallback(); return(session); }