diff --git a/src/Components/WebView/WebView/src/ComponentsWebViewServiceCollectionExtensions.cs b/src/Components/WebView/WebView/src/ComponentsWebViewServiceCollectionExtensions.cs index 678d0284ccce..460727f62051 100644 --- a/src/Components/WebView/WebView/src/ComponentsWebViewServiceCollectionExtensions.cs +++ b/src/Components/WebView/WebView/src/ComponentsWebViewServiceCollectionExtensions.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Infrastructure; using Microsoft.AspNetCore.Components.Routing; using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebView.Services; @@ -28,6 +29,8 @@ public static IServiceCollection AddBlazorWebView(this IServiceCollection servic services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); + services.TryAddScoped(); + services.TryAddScoped(sp => sp.GetRequiredService().State); services.AddSupplyValueFromQueryProvider(); return services; diff --git a/src/Components/WebView/WebView/test/ComponentsWebViewServiceCollectionExtensionsTests.cs b/src/Components/WebView/WebView/test/ComponentsWebViewServiceCollectionExtensionsTests.cs new file mode 100644 index 000000000000..fade84f452df --- /dev/null +++ b/src/Components/WebView/WebView/test/ComponentsWebViewServiceCollectionExtensionsTests.cs @@ -0,0 +1,49 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Infrastructure; +using Microsoft.Extensions.DependencyInjection; + +namespace Microsoft.AspNetCore.Components.WebView; + +public class ComponentsWebViewServiceCollectionExtensionsTests +{ + [Fact] + public void AddBlazorWebView_RegistersPersistentComponentStateServices() + { + // Arrange + var services = new ServiceCollection(); + + // Act + services.AddBlazorWebView(); + var serviceProvider = services.BuildServiceProvider(); + + // Assert + var persistenceManager = serviceProvider.GetService(); + var persistentState = serviceProvider.GetService(); + + Assert.NotNull(persistenceManager); + Assert.NotNull(persistentState); + Assert.Same(persistenceManager.State, persistentState); + } + + [Fact] + public void AddBlazorWebView_RegistersServicesAsScoped() + { + // Arrange + var services = new ServiceCollection(); + + // Act + services.AddBlazorWebView(); + + // Assert + var persistenceManagerDescriptor = services.FirstOrDefault(s => s.ServiceType == typeof(ComponentStatePersistenceManager)); + var persistentStateDescriptor = services.FirstOrDefault(s => s.ServiceType == typeof(PersistentComponentState)); + + Assert.NotNull(persistenceManagerDescriptor); + Assert.NotNull(persistentStateDescriptor); + Assert.Equal(ServiceLifetime.Scoped, persistenceManagerDescriptor.Lifetime); + Assert.Equal(ServiceLifetime.Scoped, persistentStateDescriptor.Lifetime); + } +} \ No newline at end of file