Open
Description
Is there an existing issue for this?
- I have searched the existing issues
Describe the bug
GetEnvironmentVariableValuesAsync
doesn't pass the service provider down through to EnvironmentCallbackContext
. This causes any environment variable callbacks that access the service locator (e.g. .WithOtlpExporter()
) to fail.

Expected Behavior
GetEnvironmentVariableValuesAsync
should flow the service provider.
Steps To Reproduce
var builder = DistributedApplication.CreateBuilder(args);
var container = builder.AddContainer("redis", "redis")
.WithOtlpExporter();
builder.Eventing.Subscribe<AfterEndpointsAllocatedEvent>(async (evt, ctx) =>
{
Debug.Assert(evt.Services is not null);
var envVars = await container.Resource.GetEnvironmentVariableValuesAsync();
});
Exceptions (if any)
System.InvalidOperationException: IServiceProvider is not available because the container has not yet been built.
at Aspire.Hosting.DistributedApplicationExecutionContext.get_ServiceProvider() in /_/src/Aspire.Hosting/DistributedApplicationExecutionContext.cs:line 72
at Aspire.Hosting.OtlpConfigurationExtensions.<>c__DisplayClass1_0.<<AddOtlpEnvironment>b__0>d.MoveNext() in /_/src/Aspire.Hosting/OtlpConfigurationExtensions.cs:line 64
--- End of stack trace from previous location ---
at Aspire.Hosting.ApplicationModel.ResourceExtensions.ProcessEnvironmentVariableValuesAsync(IResource resource, DistributedApplicationExecutionContext executionContext, Action`4 processValue, ILogger logger, String containerHostName, CancellationToken cancellationToken) in /_/src/Aspire.Hosting/ApplicationModel/ResourceExtensions.cs:line 352
at Aspire.Hosting.ApplicationModel.ResourceExtensions.GetEnvironmentVariableValuesAsync(IResourceWithEnvironment resource, DistributedApplicationOperation applicationOperation) in /_/src/Aspire.Hosting/ApplicationModel/ResourceExtensions.cs:line 192
at Program.<>c__DisplayClass0_0.<<<Main>$>b__0>d.MoveNext() in S:\aspire91\aspire91.AppHost\Program.cs:line 17
--- End of stack trace from previous location ---
at Aspire.Hosting.Eventing.DistributedApplicationEventing.<>c__DisplayClass4_0`1.<<Subscribe>b__0>d.MoveNext() in /_/src/Aspire.Hosting/Eventing/DistributedApplicationEventing.cs:line 82
--- End of stack trace from previous location ---
at Aspire.Hosting.Eventing.DistributedApplicationEventing.PublishAsync[T](T event, EventDispatchBehavior dispatchBehavior, CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Eventing/DistributedApplicationEventing.cs:line 69
at Aspire.Hosting.Orchestrator.ApplicationOrchestrator.OnEndpointsAllocated(OnEndpointsAllocatedContext context) in /_/src/Aspire.Hosting/Orchestrator/ApplicationOrchestrator.cs:line 98
at Aspire.Hosting.Dcp.DcpExecutorEvents.PublishAsync[T](T context) in /_/src/Aspire.Hosting/Dcp/DcpExecutorEvents.cs:line 33
at Aspire.Hosting.Dcp.DcpExecutor.CreateContainersAndExecutablesAsync(CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Dcp/DcpExecutor.cs:line 710
at Aspire.Hosting.Dcp.DcpExecutor.RunApplicationAsync(CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Dcp/DcpExecutor.cs:line 131
at Aspire.Hosting.Orchestrator.ApplicationOrchestrator.RunApplicationAsync(CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Orchestrator/ApplicationOrchestrator.cs:line 316
at Aspire.Hosting.Orchestrator.OrchestratorHostService.StartAsync(CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Orchestrator/OrchestratorHostService.cs:line 41
at Microsoft.Extensions.Hosting.Internal.Host.<StartAsync>b__14_1(IHostedService service, CancellationToken token)
at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation)
Unhandled exception. System.AggregateException: One or more errors occurred. (IServiceProvider is not available because the container has not yet been built.)
---> System.InvalidOperationException: IServiceProvider is not available because the container has not yet been built.
at Aspire.Hosting.DistributedApplicationExecutionContext.get_ServiceProvider() in /_/src/Aspire.Hosting/DistributedApplicationExecutionContext.cs:line 72
at Aspire.Hosting.OtlpConfigurationExtensions.<>c__DisplayClass1_0.<<AddOtlpEnvironment>b__0>d.MoveNext() in /_/src/Aspire.Hosting/OtlpConfigurationExtensions.cs:line 64
--- End of stack trace from previous location ---
at Aspire.Hosting.ApplicationModel.ResourceExtensions.ProcessEnvironmentVariableValuesAsync(IResource resource, DistributedApplicationExecutionContext executionContext, Action`4 processValue, ILogger logger, String containerHostName, CancellationToken cancellationToken) in /_/src/Aspire.Hosting/ApplicationModel/ResourceExtensions.cs:line 352
at Aspire.Hosting.ApplicationModel.ResourceExtensions.GetEnvironmentVariableValuesAsync(IResourceWithEnvironment resource, DistributedApplicationOperation applicationOperation) in /_/src/Aspire.Hosting/ApplicationModel/ResourceExtensions.cs:line 192
at Program.<>c__DisplayClass0_0.<<<Main>$>b__0>d.MoveNext() in S:\aspire91\aspire91.AppHost\Program.cs:line 17
--- End of stack trace from previous location ---
at Aspire.Hosting.Eventing.DistributedApplicationEventing.<>c__DisplayClass4_0`1.<<Subscribe>b__0>d.MoveNext() in /_/src/Aspire.Hosting/Eventing/DistributedApplicationEventing.cs:line 82
--- End of stack trace from previous location ---
at Aspire.Hosting.Eventing.DistributedApplicationEventing.PublishAsync[T](T event, EventDispatchBehavior dispatchBehavior, CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Eventing/DistributedApplicationEventing.cs:line 69
at Aspire.Hosting.Orchestrator.ApplicationOrchestrator.OnEndpointsAllocated(OnEndpointsAllocatedContext context) in /_/src/Aspire.Hosting/Orchestrator/ApplicationOrchestrator.cs:line 98
at Aspire.Hosting.Dcp.DcpExecutorEvents.PublishAsync[T](T context) in /_/src/Aspire.Hosting/Dcp/DcpExecutorEvents.cs:line 33
at Aspire.Hosting.Dcp.DcpExecutor.CreateContainersAndExecutablesAsync(CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Dcp/DcpExecutor.cs:line 710
at Aspire.Hosting.Dcp.DcpExecutor.RunApplicationAsync(CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Dcp/DcpExecutor.cs:line 131
at Aspire.Hosting.Orchestrator.ApplicationOrchestrator.RunApplicationAsync(CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Orchestrator/ApplicationOrchestrator.cs:line 316
at Aspire.Hosting.Orchestrator.OrchestratorHostService.StartAsync(CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Orchestrator/OrchestratorHostService.cs:line 41
at Microsoft.Extensions.Hosting.Internal.Host.<StartAsync>b__14_1(IHostedService service, CancellationToken token)
at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation)
at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Aspire.Hosting.DistributedApplication.RunAsync(CancellationToken cancellationToken) in /_/src/Aspire.Hosting/DistributedApplication.cs:line 415
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task.Wait()
at Aspire.Hosting.DistributedApplication.Run() in /_/src/Aspire.Hosting/DistributedApplication.cs:line 443
at Program.<Main>$(String[] args) in S:\aspire91\aspire91.AppHost\Program.cs:line 74
.NET Version info
No response
Anything else?
No response