Skip to content

Commit 330cb78

Browse files
committed
Avoid checking the shared cache on a per-request basis to resolve the type for existing persistent service registrations
1 parent 8491a27 commit 330cb78

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

src/Components/Components/src/PersistentState/IPersistentServiceRegistration.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ internal interface IPersistentServiceRegistration
1010
public string FullTypeName { get; }
1111

1212
public IComponentRenderMode? GetRenderModeOrDefault();
13+
14+
public Type? GetResolvedTypeOrNull() => null;
1315
}

src/Components/Components/src/PersistentState/PersistentServiceRegistration.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ internal sealed class PersistentServiceRegistration<TService>(IComponentRenderMo
1313

1414
public IComponentRenderMode? GetRenderModeOrDefault() => componentRenderMode;
1515

16+
public Type? GetResolvedTypeOrNull() => typeof(TService);
17+
1618
private string GetDebuggerDisplay() => $"{Assembly}::{FullTypeName}";
1719
}

src/Components/Components/src/PersistentState/PersistentServicesRegistry.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ internal void RegisterForPersistence(PersistentComponentState state)
5050
for (var i = 0; i < _registrations.Length; i++)
5151
{
5252
var registration = _registrations[i];
53-
var type = ResolveType(registration.Assembly, registration.FullTypeName);
53+
var type = ResolveType(registration);
5454
if (type == null)
5555
{
5656
continue;
@@ -112,7 +112,7 @@ private void RestoreRegistrationsIfAvailable(PersistentComponentState state)
112112
{
113113
foreach (var registration in _registrations)
114114
{
115-
var type = ResolveType(registration.Assembly, registration.FullTypeName);
115+
var type = ResolveType(registration);
116116
if (type == null)
117117
{
118118
continue;
@@ -142,8 +142,16 @@ private static void RestoreInstanceState(object instance, Type type, PersistentC
142142

143143
private static IPersistentServiceRegistration[] ResolveRegistrations(IEnumerable<IPersistentServiceRegistration> registrations) => [.. registrations.DistinctBy(r => (r.Assembly, r.FullTypeName)).OrderBy(r => r.Assembly).ThenBy(r => r.FullTypeName)];
144144

145-
private static Type? ResolveType(string assembly, string fullTypeName) =>
146-
_persistentServiceTypeCache.GetRootType(assembly, fullTypeName);
145+
private static Type? ResolveType(IPersistentServiceRegistration registration)
146+
{
147+
if(registration.GetResolvedTypeOrNull() is Type type)
148+
{
149+
return type;
150+
}
151+
var assembly = registration.Assembly;
152+
var fullTypeName = registration.FullTypeName;
153+
return _persistentServiceTypeCache.GetRootType(assembly, fullTypeName);
154+
}
147155

148156
private sealed class PropertiesAccessor
149157
{

0 commit comments

Comments
 (0)