1616
1717using System ;
1818using System . Threading ;
19+ using Microsoft . Extensions . DependencyInjection ;
20+ using Microsoft . Extensions . Options ;
1921using OpenTelemetry . Exporter ;
2022using OpenTelemetry . Internal ;
2123
@@ -35,70 +37,94 @@ public static class ConsoleExporterMetricsExtensions
3537 /// <param name="builder"><see cref="MeterProviderBuilder"/> builder to use.</param>
3638 /// <returns>The instance of <see cref="MeterProviderBuilder"/> to chain the calls.</returns>
3739 public static MeterProviderBuilder AddConsoleExporter ( this MeterProviderBuilder builder )
38- {
39- return AddConsoleExporter ( builder , options => { } ) ;
40- }
40+ => AddConsoleExporter ( builder , name : null , configureExporter : null ) ;
4141
4242 /// <summary>
4343 /// Adds <see cref="ConsoleMetricExporter"/> to the <see cref="MeterProviderBuilder"/>.
4444 /// </summary>
4545 /// <param name="builder"><see cref="MeterProviderBuilder"/> builder to use.</param>
46- /// <param name="configureExporter">Exporter configuration options .</param>
46+ /// <param name="configureExporter">Callback action for configuring <see cref="ConsoleExporterOptions"/> .</param>
4747 /// <returns>The instance of <see cref="MeterProviderBuilder"/> to chain the calls.</returns>
4848 public static MeterProviderBuilder AddConsoleExporter ( this MeterProviderBuilder builder , Action < ConsoleExporterOptions > configureExporter )
49+ => AddConsoleExporter ( builder , name : null , configureExporter ) ;
50+
51+ /// <summary>
52+ /// Adds <see cref="ConsoleMetricExporter"/> to the <see cref="MeterProviderBuilder"/>.
53+ /// </summary>
54+ /// <param name="builder"><see cref="MeterProviderBuilder"/> builder to use.</param>
55+ /// <param name="name">Name which is used when retrieving options.</param>
56+ /// <param name="configureExporter">Callback action for configuring <see cref="ConsoleExporterOptions"/>.</param>
57+ /// <returns>The instance of <see cref="MeterProviderBuilder"/> to chain the calls.</returns>
58+ public static MeterProviderBuilder AddConsoleExporter (
59+ this MeterProviderBuilder builder ,
60+ string name ,
61+ Action < ConsoleExporterOptions > configureExporter )
4962 {
5063 Guard . ThrowIfNull ( builder ) ;
5164
52- if ( builder is IDeferredMeterProviderBuilder deferredMeterProviderBuilder )
65+ name ??= Options . DefaultName ;
66+
67+ if ( configureExporter != null )
5368 {
54- return deferredMeterProviderBuilder . Configure ( ( sp , builder ) =>
55- {
56- AddConsoleExporter ( builder , sp . GetOptions < ConsoleExporterOptions > ( ) , sp . GetOptions < MetricReaderOptions > ( ) , configureExporter , null ) ;
57- } ) ;
69+ builder . ConfigureServices ( services => services . Configure ( name , configureExporter ) ) ;
5870 }
5971
60- return AddConsoleExporter ( builder , new ConsoleExporterOptions ( ) , new MetricReaderOptions ( ) , configureExporter , null ) ;
72+ return builder . ConfigureBuilder ( ( sp , builder ) =>
73+ {
74+ AddConsoleExporter (
75+ builder ,
76+ sp . GetRequiredService < IOptionsSnapshot < ConsoleExporterOptions > > ( ) . Get ( name ) ,
77+ sp . GetRequiredService < IOptionsSnapshot < MetricReaderOptions > > ( ) . Get ( name ) ) ;
78+ } ) ;
6179 }
6280
6381 /// <summary>
6482 /// Adds <see cref="ConsoleMetricExporter"/> to the <see cref="MeterProviderBuilder"/>.
6583 /// </summary>
6684 /// <param name="builder"><see cref="MeterProviderBuilder"/> builder to use.</param>
67- /// <param name="configureExporterAndMetricReader">Exporter and <see cref="MetricReader"/> configuration options.</param>
85+ /// <param name="configureExporterAndMetricReader">Callback action for
86+ /// configuring <see cref="ConsoleExporterOptions"/> and <see
87+ /// cref="MetricReaderOptions"/>.</param>
6888 /// <returns>The instance of <see cref="MeterProviderBuilder"/> to chain the calls.</returns>
6989 public static MeterProviderBuilder AddConsoleExporter (
7090 this MeterProviderBuilder builder ,
7191 Action < ConsoleExporterOptions , MetricReaderOptions > configureExporterAndMetricReader )
92+ => AddConsoleExporter ( builder , name : null , configureExporterAndMetricReader ) ;
93+
94+ /// <summary>
95+ /// Adds <see cref="ConsoleMetricExporter"/> to the <see cref="MeterProviderBuilder"/>.
96+ /// </summary>
97+ /// <param name="builder"><see cref="MeterProviderBuilder"/> builder to use.</param>
98+ /// <param name="name">Name which is used when retrieving options.</param>
99+ /// <param name="configureExporterAndMetricReader">Callback action for
100+ /// configuring <see cref="ConsoleExporterOptions"/> and <see
101+ /// cref="MetricReaderOptions"/>.</param>
102+ /// <returns>The instance of <see cref="MeterProviderBuilder"/> to chain the calls.</returns>
103+ public static MeterProviderBuilder AddConsoleExporter (
104+ this MeterProviderBuilder builder ,
105+ string name ,
106+ Action < ConsoleExporterOptions , MetricReaderOptions > configureExporterAndMetricReader )
72107 {
73- Guard . ThrowIfNull ( builder , nameof ( builder ) ) ;
108+ Guard . ThrowIfNull ( builder ) ;
74109
75- if ( builder is IDeferredMeterProviderBuilder deferredMeterProviderBuilder )
110+ name ??= Options . DefaultName ;
111+
112+ return builder . ConfigureBuilder ( ( sp , builder ) =>
76113 {
77- return deferredMeterProviderBuilder . Configure ( ( sp , builder ) =>
78- {
79- AddConsoleExporter ( builder , sp . GetOptions < ConsoleExporterOptions > ( ) , sp . GetOptions < MetricReaderOptions > ( ) , null , configureExporterAndMetricReader ) ;
80- } ) ;
81- }
114+ var exporterOptions = sp . GetRequiredService < IOptionsSnapshot < ConsoleExporterOptions > > ( ) . Get ( name ) ;
115+ var metricReaderOptions = sp . GetRequiredService < IOptionsSnapshot < MetricReaderOptions > > ( ) . Get ( name ) ;
82116
83- return AddConsoleExporter ( builder , new ConsoleExporterOptions ( ) , new MetricReaderOptions ( ) , null , configureExporterAndMetricReader ) ;
117+ configureExporterAndMetricReader ? . Invoke ( exporterOptions , metricReaderOptions ) ;
118+
119+ AddConsoleExporter ( builder , exporterOptions , metricReaderOptions ) ;
120+ } ) ;
84121 }
85122
86123 private static MeterProviderBuilder AddConsoleExporter (
87124 MeterProviderBuilder builder ,
88125 ConsoleExporterOptions exporterOptions ,
89- MetricReaderOptions metricReaderOptions ,
90- Action < ConsoleExporterOptions > configureExporter ,
91- Action < ConsoleExporterOptions , MetricReaderOptions > configureExporterAndMetricReader )
126+ MetricReaderOptions metricReaderOptions )
92127 {
93- if ( configureExporterAndMetricReader != null )
94- {
95- configureExporterAndMetricReader . Invoke ( exporterOptions , metricReaderOptions ) ;
96- }
97- else
98- {
99- configureExporter ? . Invoke ( exporterOptions ) ;
100- }
101-
102128 var metricExporter = new ConsoleMetricExporter ( exporterOptions ) ;
103129
104130 var metricReader = PeriodicExportingMetricReaderHelper . CreatePeriodicExportingMetricReader (
0 commit comments