@@ -35,6 +35,7 @@ private static string GeneratePartialClass(INamedTypeSymbol classSymbol, List<Bl
35
35
var className = GetClassName ( classSymbol ) ;
36
36
var twoWayParameters = parameters . Where ( p => p . IsTwoWayBound ) . ToArray ( ) ;
37
37
var isBaseTypeComponentBase = classSymbol . BaseType ? . ToDisplayString ( ) == "Microsoft.AspNetCore.Components.ComponentBase" ;
38
+ var doesSupporteParametersViewCache = InheritsFromBitComponentBase ( classSymbol ) ;
38
39
39
40
StringBuilder builder = new StringBuilder ( $@ "using System;
40
41
using System.Threading.Tasks;
@@ -62,7 +63,14 @@ public override Task SetParametersAsync(ParameterView parameters)
62
63
{
63
64
builder . AppendLine ( $ " { par . PropertySymbol . Name } HasBeenSet = false;") ;
64
65
}
65
- builder . AppendLine ( " var parametersDictionary = parameters.ToDictionary() as Dictionary<string, object>;" ) ;
66
+ if ( doesSupporteParametersViewCache )
67
+ {
68
+ builder . AppendLine ( " var parametersDictionary = (ParametersCache ??= parameters.ToDictionary() as Dictionary<string, object>);" ) ;
69
+ }
70
+ else
71
+ {
72
+ builder . AppendLine ( " var parametersDictionary = parameters.ToDictionary() as Dictionary<string, object>;" ) ;
73
+ }
66
74
builder . AppendLine ( " foreach (var parameter in parametersDictionary!)" ) ;
67
75
builder . AppendLine ( " {" ) ;
68
76
builder . AppendLine ( " switch (parameter.Key)" ) ;
@@ -117,7 +125,14 @@ public override Task SetParametersAsync(ParameterView parameters)
117
125
}
118
126
else
119
127
{
120
- builder . AppendLine ( " return base.SetParametersAsync(ParameterView.FromDictionary(parametersDictionary as IDictionary<string, object?>));" ) ;
128
+ if ( doesSupporteParametersViewCache )
129
+ {
130
+ builder . AppendLine ( " return base.SetParametersAsync(ParameterView.Empty);" ) ;
131
+ }
132
+ else
133
+ {
134
+ builder . AppendLine ( " return base.SetParametersAsync(ParameterView.FromDictionary(parametersDictionary as IDictionary<string, object?>));" ) ;
135
+ }
121
136
}
122
137
builder . AppendLine ( @" }" ) ;
123
138
@@ -171,4 +186,18 @@ private static string GetClassName(INamedTypeSymbol classSymbol)
171
186
172
187
return sbName . ToString ( ) ;
173
188
}
189
+
190
+ private static bool InheritsFromBitComponentBase ( INamedTypeSymbol ? typeSymbol )
191
+ {
192
+ if ( typeSymbol is null )
193
+ return false ;
194
+
195
+ if ( typeSymbol . TypeKind is not TypeKind . Class )
196
+ return false ;
197
+
198
+ if ( typeSymbol . Name == "BitComponentBase" )
199
+ return true ;
200
+
201
+ return InheritsFromBitComponentBase ( typeSymbol . BaseType ) ;
202
+ }
174
203
}
0 commit comments