コード例 #1
0
        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>());
        }