Skip to content

Commit e66ad54

Browse files
authored
Improve handling for shared values in Blazor Server (#21299)
1 parent 96e8d89 commit e66ad54

File tree

4 files changed

+46
-9
lines changed

4 files changed

+46
-9
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System;
2+
using Xunit;
3+
4+
namespace Microsoft.AspNetCore.Blazor.Rendering
5+
{
6+
public class RenderRegistryTest
7+
{
8+
[Fact]
9+
public void RendererRegistry_Find_ThrowsErrorOnNonWASM()
10+
{
11+
// Act
12+
Exception ex = Assert.Throws<ArgumentException>(() => RendererRegistry.Find(123));
13+
14+
// Assert
15+
Assert.Equal("There is no renderer with ID 123.", ex.Message);
16+
}
17+
[Fact]
18+
public void RendererRegistry_Remove_DoesNothingOnNonWASM()
19+
{
20+
// Act
21+
var result = RendererRegistry.TryRemove(123);
22+
23+
// Assert
24+
Assert.False(result);
25+
}
26+
}
27+
}

src/Components/Components/src/BindConverter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -537,8 +537,8 @@ public static bool TryConvertToNullableBool(object obj, CultureInfo culture, out
537537
return ConvertToNullableBoolCore(obj, culture, out value);
538538
}
539539

540-
internal static BindParser<bool> ConvertToBool = ConvertToBoolCore;
541-
internal static BindParser<bool?> ConvertToNullableBool = ConvertToNullableBoolCore;
540+
internal readonly static BindParser<bool> ConvertToBool = ConvertToBoolCore;
541+
internal readonly static BindParser<bool?> ConvertToNullableBool = ConvertToNullableBoolCore;
542542

543543
private static bool ConvertToBoolCore(object obj, CultureInfo culture, out bool value)
544544
{

src/Components/Web/src/Forms/InputNumber.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace Microsoft.AspNetCore.Components.Forms
1313
/// </summary>
1414
public class InputNumber<TValue> : InputBase<TValue>
1515
{
16-
private static string _stepAttributeValue; // Null by default, so only allows whole numbers as per HTML spec
16+
private readonly static string _stepAttributeValue; // Null by default, so only allows whole numbers as per HTML spec
1717

1818
static InputNumber()
1919
{

src/Components/WebAssembly/WebAssembly/src/Rendering/RendererRegistry.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Collections.Generic;
6+
using System.Runtime.InteropServices;
67

78
namespace Microsoft.AspNetCore.Components.WebAssembly.Rendering
89
{
@@ -14,27 +15,36 @@ internal static class RendererRegistry
1415
// them even though we might still receive incoming events from JS.
1516

1617
private static int _nextId;
17-
private static Dictionary<int, WebAssemblyRenderer> _renderers = new Dictionary<int, WebAssemblyRenderer>();
18+
private static Dictionary<int, WebAssemblyRenderer> _renderers;
19+
20+
static RendererRegistry()
21+
{
22+
bool _isWebAssembly = RuntimeInformation.IsOSPlatform(OSPlatform.Create("BROWSER"));
23+
if (_isWebAssembly)
24+
{
25+
_renderers = new Dictionary<int, WebAssemblyRenderer>();
26+
}
27+
}
1828

1929
internal static WebAssemblyRenderer Find(int rendererId)
2030
{
21-
return _renderers.ContainsKey(rendererId)
22-
? _renderers[rendererId]
31+
return _renderers != null && _renderers.ContainsKey(rendererId)
32+
? _renderers?[rendererId]
2333
: throw new ArgumentException($"There is no renderer with ID {rendererId}.");
2434
}
2535

2636
public static int Add(WebAssemblyRenderer renderer)
2737
{
2838
var id = _nextId++;
29-
_renderers.Add(id, renderer);
39+
_renderers?.Add(id, renderer);
3040
return id;
3141
}
3242

3343
public static bool TryRemove(int rendererId)
3444
{
35-
if (_renderers.ContainsKey(rendererId))
45+
if (_renderers != null && _renderers.ContainsKey(rendererId))
3646
{
37-
_renderers.Remove(rendererId);
47+
_renderers?.Remove(rendererId);
3848
return true;
3949
}
4050
else

0 commit comments

Comments
 (0)