diff --git a/src/OpenTelemetry.Extensions.Hosting/OpenTelemetryBuilder.cs b/src/OpenTelemetry.Extensions.Hosting/OpenTelemetryBuilder.cs
index 215d43bcbee..4f0b51a00b4 100644
--- a/src/OpenTelemetry.Extensions.Hosting/OpenTelemetryBuilder.cs
+++ b/src/OpenTelemetry.Extensions.Hosting/OpenTelemetryBuilder.cs
@@ -62,13 +62,13 @@ public OpenTelemetryBuilder ConfigureResource(
Guard.ThrowIfNull(configure);
this.Services.ConfigureOpenTelemetryMeterProvider(
- (sp, builder) => builder.ConfigureResource(configure));
+ builder => builder.ConfigureResource(configure));
this.Services.ConfigureOpenTelemetryTracerProvider(
- (sp, builder) => builder.ConfigureResource(configure));
+ builder => builder.ConfigureResource(configure));
this.Services.ConfigureOpenTelemetryLoggerProvider(
- (sp, builder) => builder.ConfigureResource(configure));
+ builder => builder.ConfigureResource(configure));
return this;
}
diff --git a/src/OpenTelemetry/Metrics/Builder/MeterProviderBuilderExtensions.cs b/src/OpenTelemetry/Metrics/Builder/MeterProviderBuilderExtensions.cs
index d5c979604bf..767cf30714b 100644
--- a/src/OpenTelemetry/Metrics/Builder/MeterProviderBuilderExtensions.cs
+++ b/src/OpenTelemetry/Metrics/Builder/MeterProviderBuilderExtensions.cs
@@ -277,6 +277,8 @@ public static MeterProviderBuilder SetMaxMetricPointsPerMetricStream(this MeterP
/// The supplied for chaining.
public static MeterProviderBuilder SetResourceBuilder(this MeterProviderBuilder meterProviderBuilder, ResourceBuilder resourceBuilder)
{
+ Guard.ThrowIfNull(resourceBuilder);
+
meterProviderBuilder.ConfigureBuilder((sp, builder) =>
{
if (builder is MeterProviderBuilderSdk meterProviderBuilderSdk)
@@ -297,6 +299,8 @@ public static MeterProviderBuilder SetResourceBuilder(this MeterProviderBuilder
/// The supplied for chaining.
public static MeterProviderBuilder ConfigureResource(this MeterProviderBuilder meterProviderBuilder, Action configure)
{
+ Guard.ThrowIfNull(configure);
+
meterProviderBuilder.ConfigureBuilder((sp, builder) =>
{
if (builder is MeterProviderBuilderSdk meterProviderBuilderSdk)
diff --git a/test/OpenTelemetry.Extensions.Hosting.Tests/OpenTelemetryBuilderTests.cs b/test/OpenTelemetry.Extensions.Hosting.Tests/OpenTelemetryBuilderTests.cs
index 4d31768c2ff..43da25a08b4 100644
--- a/test/OpenTelemetry.Extensions.Hosting.Tests/OpenTelemetryBuilderTests.cs
+++ b/test/OpenTelemetry.Extensions.Hosting.Tests/OpenTelemetryBuilderTests.cs
@@ -75,4 +75,41 @@ public void ConfigureResourceTest()
loggerProvider.Resource.Attributes,
kvp => kvp.Key == "l_key1" && (string)kvp.Value == "l_value1");
}
+
+ [Fact]
+ public void ConfigureResourceServiceProviderTest()
+ {
+ var services = new ServiceCollection();
+
+ services.AddSingleton();
+
+ services.AddOpenTelemetry()
+ .ConfigureResource(r => r.AddDetector(sp => sp.GetRequiredService()))
+ .WithLogging()
+ .WithMetrics()
+ .WithTracing();
+
+ using var sp = services.BuildServiceProvider();
+
+ var tracerProvider = sp.GetRequiredService() as TracerProviderSdk;
+ var meterProvider = sp.GetRequiredService() as MeterProviderSdk;
+ var loggerProvider = sp.GetRequiredService() as LoggerProviderSdk;
+
+ Assert.NotNull(tracerProvider);
+ Assert.NotNull(meterProvider);
+ Assert.NotNull(loggerProvider);
+
+ Assert.Single(tracerProvider.Resource.Attributes, kvp => kvp.Key == "key1" && (string)kvp.Value == "value1");
+ Assert.Single(meterProvider.Resource.Attributes, kvp => kvp.Key == "key1" && (string)kvp.Value == "value1");
+ Assert.Single(loggerProvider.Resource.Attributes, kvp => kvp.Key == "key1" && (string)kvp.Value == "value1");
+ }
+
+ private sealed class TestResourceDetector : IResourceDetector
+ {
+ public Resource Detect() => ResourceBuilder.CreateEmpty().AddAttributes(
+ new Dictionary
+ {
+ ["key1"] = "value1",
+ }).Build();
+ }
}