Skip to content

Commit 823c50d

Browse files
authored
[Blazor] Register persistent component state services in AddBlazorWebView (#62384)
* Adds persistent component state service registrations to AddBlazorWebView to ensure that components that use PersistentComponentState can render in WebView scenarios.
1 parent 0e8c7de commit 823c50d

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

src/Components/WebView/WebView/src/ComponentsWebViewServiceCollectionExtensions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33

44
using Microsoft.AspNetCore.Components;
5+
using Microsoft.AspNetCore.Components.Infrastructure;
56
using Microsoft.AspNetCore.Components.Routing;
67
using Microsoft.AspNetCore.Components.Web;
78
using Microsoft.AspNetCore.Components.WebView.Services;
@@ -28,6 +29,8 @@ public static IServiceCollection AddBlazorWebView(this IServiceCollection servic
2829
services.TryAddScoped<IScrollToLocationHash, WebViewScrollToLocationHash>();
2930
services.TryAddScoped<NavigationManager, WebViewNavigationManager>();
3031
services.TryAddScoped<IErrorBoundaryLogger, WebViewErrorBoundaryLogger>();
32+
services.TryAddScoped<ComponentStatePersistenceManager>();
33+
services.TryAddScoped<PersistentComponentState>(sp => sp.GetRequiredService<ComponentStatePersistenceManager>().State);
3134
services.AddSupplyValueFromQueryProvider();
3235

3336
return services;
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using Microsoft.AspNetCore.Components;
5+
using Microsoft.AspNetCore.Components.Infrastructure;
6+
using Microsoft.Extensions.DependencyInjection;
7+
8+
namespace Microsoft.AspNetCore.Components.WebView;
9+
10+
public class ComponentsWebViewServiceCollectionExtensionsTests
11+
{
12+
[Fact]
13+
public void AddBlazorWebView_RegistersPersistentComponentStateServices()
14+
{
15+
// Arrange
16+
var services = new ServiceCollection();
17+
18+
// Act
19+
services.AddBlazorWebView();
20+
var serviceProvider = services.BuildServiceProvider();
21+
22+
// Assert
23+
var persistenceManager = serviceProvider.GetService<ComponentStatePersistenceManager>();
24+
var persistentState = serviceProvider.GetService<PersistentComponentState>();
25+
26+
Assert.NotNull(persistenceManager);
27+
Assert.NotNull(persistentState);
28+
Assert.Same(persistenceManager.State, persistentState);
29+
}
30+
31+
[Fact]
32+
public void AddBlazorWebView_RegistersServicesAsScoped()
33+
{
34+
// Arrange
35+
var services = new ServiceCollection();
36+
37+
// Act
38+
services.AddBlazorWebView();
39+
40+
// Assert
41+
var persistenceManagerDescriptor = services.FirstOrDefault(s => s.ServiceType == typeof(ComponentStatePersistenceManager));
42+
var persistentStateDescriptor = services.FirstOrDefault(s => s.ServiceType == typeof(PersistentComponentState));
43+
44+
Assert.NotNull(persistenceManagerDescriptor);
45+
Assert.NotNull(persistentStateDescriptor);
46+
Assert.Equal(ServiceLifetime.Scoped, persistenceManagerDescriptor.Lifetime);
47+
Assert.Equal(ServiceLifetime.Scoped, persistentStateDescriptor.Lifetime);
48+
}
49+
}

0 commit comments

Comments
 (0)