File: Program.cs
Web Access
Project: src\playground\BlazorHosted\BlazorHosted.Client\BlazorHosted.Client.csproj (BlazorHosted.Client)
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.Hosting;
using OpenTelemetry.Metrics;
using OpenTelemetry.Trace;
 
var builder = WebAssemblyHostBuilder.CreateDefault(args);
 
// Environment variables are injected via JS initializer into MonoConfig.environmentVariables.
// They are available via Environment.GetEnvironmentVariable() but NOT automatically in IConfiguration.
// Service Discovery reads from IConfiguration, so we add environment variables to configuration.
builder.Configuration.AddEnvironmentVariables();
 
// Add Aspire service defaults (OpenTelemetry, service discovery, resilience)
builder.AddBlazorClientServiceDefaults();
 
// Named HttpClient for the weather API - uses service discovery to resolve "weatherapi"
builder.Services.AddHttpClient("weatherapi", client =>
{
    client.BaseAddress = new Uri("https+http://weatherapi");
});
 
// Named HttpClient for the time API - uses service discovery to resolve "timeapi"
builder.Services.AddHttpClient("timeapi", client =>
{
    client.BaseAddress = new Uri("https+http://timeapi");
});
 
var host = builder.Build();
 
// WebAssembly does not support IHostedService, so TelemetryHostedService is never started.
// We must force initialization of MeterProvider and TracerProvider manually.
// See: https://github.com/dotnet/aspire/issues/2816
_ = host.Services.GetService<MeterProvider>();
_ = host.Services.GetService<TracerProvider>();
 
await host.RunAsync();