public static IQueryExecutionBuilder UseInstrumentation( this IQueryExecutionBuilder builder, TracingPreference tracingPreference) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } var listener = new DiagnosticListener(DiagnosticNames.Listener); builder .RemoveService <DiagnosticListener>() .RemoveService <DiagnosticSource>(); builder.Services .AddSingleton(listener) .AddSingleton <DiagnosticSource>(listener) .AddSingleton(sp => new QueryExecutionDiagnostics( sp.GetRequiredService <DiagnosticListener>(), sp.GetServices <IDiagnosticObserver>())); if (tracingPreference != TracingPreference.Never) { builder .AddDiagnosticObserver(new ApolloTracingDiagnosticObserver( tracingPreference)); } return(builder.Use <InstrumentationMiddleware>()); }