diff --git a/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs b/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs index 30e4c5b03a89..f126d964fe19 100644 --- a/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs +++ b/src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyHostBuilder.cs @@ -342,5 +342,13 @@ internal void InitializeDefaultServices() Services.AddSingleton(); RegisterPersistentComponentStateServiceCollectionExtensions.AddPersistentServiceRegistration(Services, RenderMode.InteractiveWebAssembly); Services.AddSupplyValueFromQueryProvider(); + + // Register metrics and tracing by default (opt-out via feature switch for trimming) + var isTelemetryDisabled = AppContext.TryGetSwitch("System.Diagnostics.Metrics.Meter.IsSupported", out var switchValue) && switchValue == false; + if (!isTelemetryDisabled) + { + ComponentsMetricsServiceCollectionExtensions.AddComponentsMetrics(Services); + ComponentsMetricsServiceCollectionExtensions.AddComponentsTracing(Services); + } } } diff --git a/src/Components/WebAssembly/WebAssembly/src/Microsoft.AspNetCore.Components.WebAssembly.csproj b/src/Components/WebAssembly/WebAssembly/src/Microsoft.AspNetCore.Components.WebAssembly.csproj index 94d3670617d0..7ddd6a54e3c1 100644 --- a/src/Components/WebAssembly/WebAssembly/src/Microsoft.AspNetCore.Components.WebAssembly.csproj +++ b/src/Components/WebAssembly/WebAssembly/src/Microsoft.AspNetCore.Components.WebAssembly.csproj @@ -21,6 +21,7 @@ + diff --git a/src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs b/src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs index e2321da4593a..e9be298b2c32 100644 --- a/src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs +++ b/src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyHostBuilderTest.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Diagnostics.Metrics; using System.Text; using System.Text.Json; using Microsoft.AspNetCore.Components.Routing; @@ -341,4 +342,21 @@ public void Configuration_IncludesEnvironmentVariables_WhenAddedExplicitly() Environment.SetEnvironmentVariable(testEnvVarKey, null); } } + + [Fact] + public void Constructor_RegistersMetricsAndTracingServices() + { + // Arrange & Act + var builder = new WebAssemblyHostBuilder(new TestInternalJSImportMethods()); + var host = builder.Build(); + + // Assert - Verify that IMeterFactory is registered (required for ComponentsMetrics) + // and that the service collection was configured for both metrics and tracing + var meterFactory = host.Services.GetService(); + Assert.NotNull(meterFactory); + + // Note: ComponentsActivitySource is scoped and internal, so we can't directly + // test for it here, but both AddComponentsMetrics and AddComponentsTracing + // are called together, ensuring both telemetry services are registered. + } }