React to JSRuntime changes

This commit is contained in:
Pranav K 2019-08-15 13:34:20 -07:00 committed by Justin Kotalik
parent 02fd9a9dc9
commit 98c8988baa
11 changed files with 65 additions and 67 deletions

View File

@ -13,6 +13,7 @@ using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.JSInterop; using Microsoft.JSInterop;
using Microsoft.JSInterop.Infrastructure;
namespace Microsoft.AspNetCore.Components.Server.Circuits namespace Microsoft.AspNetCore.Components.Server.Circuits
{ {
@ -342,7 +343,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
{ {
SetCurrentJSRuntime(); SetCurrentJSRuntime();
Log.BeginInvokeDotNet(_logger, callId, assemblyName, methodIdentifier, dotNetObjectId); Log.BeginInvokeDotNet(_logger, callId, assemblyName, methodIdentifier, dotNetObjectId);
DotNetDispatcher.BeginInvoke(callId, assemblyName, methodIdentifier, dotNetObjectId, argsJson); DotNetDispatcher.BeginInvokeDotNet(callId, assemblyName, methodIdentifier, dotNetObjectId, argsJson);
}); });
} }
catch (Exception ex) catch (Exception ex)
@ -377,7 +378,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
Log.EndInvokeJSSucceeded(_logger, asyncCall); Log.EndInvokeJSSucceeded(_logger, asyncCall);
} }
DotNetDispatcher.EndInvoke(arguments); DotNetDispatcher.EndInvokeJS(arguments);
}); });
} }
catch (Exception ex) catch (Exception ex)

View File

@ -11,7 +11,7 @@ using Microsoft.JSInterop;
namespace Microsoft.AspNetCore.Components.Server.Circuits namespace Microsoft.AspNetCore.Components.Server.Circuits
{ {
internal class RemoteJSRuntime : JSRuntimeBase internal class RemoteJSRuntime : JSRuntime
{ {
private readonly CircuitOptions _options; private readonly CircuitOptions _options;
private readonly ILogger<RemoteJSRuntime> _logger; private readonly ILogger<RemoteJSRuntime> _logger;

View File

@ -64,11 +64,11 @@ namespace Microsoft.AspNetCore.Components.Web.Rendering
var component = InstantiateComponent(componentType); var component = InstantiateComponent(componentType);
var componentId = AssignRootComponentId(component); var componentId = AssignRootComponentId(component);
var attachComponentTask = _jsRuntime.InvokeAsync<object>( var attachComponentTask = _jsRuntime.InvokeVoidAsync(
"Blazor._internal.attachRootComponentToElement", "Blazor._internal.attachRootComponentToElement",
domElementSelector, domElementSelector,
componentId); componentId);
CaptureAsyncExceptions(attachComponentTask); CaptureAsyncExceptions(attachComponentTask.AsTask());
return RenderRootComponentAsync(componentId); return RenderRootComponentAsync(componentId);
} }

View File

@ -427,12 +427,8 @@ namespace Microsoft.AspNetCore.Components.Web.Rendering
private TestRemoteRenderer GetRemoteRenderer(IServiceProvider serviceProvider, CircuitClientProxy circuitClient = null) private TestRemoteRenderer GetRemoteRenderer(IServiceProvider serviceProvider, CircuitClientProxy circuitClient = null)
{ {
var jsRuntime = new Mock<IJSRuntime>(); var jsRuntime = new Mock<IJSRuntime>();
jsRuntime.Setup(r => r.InvokeAsync<object>( jsRuntime.Setup(r => r.InvokeAsync<object>("Blazor._internal.attachRootComponentToElement", It.IsAny<object[]>()))
"Blazor._internal.attachRootComponentToElement", .ReturnsAsync(new ValueTask<object>((object)null));
It.IsAny<int>(),
It.IsAny<string>(),
It.IsAny<int>()))
.ReturnsAsync(Task.FromResult<object>(null));
return new TestRemoteRenderer( return new TestRemoteRenderer(
serviceProvider, serviceProvider,

View File

@ -72,11 +72,11 @@
var instanceMethodsTarget = new JavaScriptInterop(); var instanceMethodsTarget = new JavaScriptInterop();
Console.WriteLine("Starting interop invocations."); Console.WriteLine("Starting interop invocations.");
await JSRuntime.InvokeAsync<object>( await JSRuntime.InvokeVoidAsync(
"jsInteropTests.invokeDotNetInteropMethodsAsync", "jsInteropTests.invokeDotNetInteropMethodsAsync",
shouldSupportSyncInterop, shouldSupportSyncInterop,
DotNetObjectRef.Create(testDTOTOPassByRef), DotNetObjectReference.Create(testDTOTOPassByRef),
DotNetObjectRef.Create(instanceMethodsTarget)); DotNetObjectReference.Create(instanceMethodsTarget));
if (shouldSupportSyncInterop) if (shouldSupportSyncInterop)
{ {
@ -117,7 +117,7 @@
var passDotNetObjectByRefArg = new PassDotNetObjectByRefArgs var passDotNetObjectByRefArg = new PassDotNetObjectByRefArgs
{ {
StringValue = "My string", StringValue = "My string",
TestDto = DotNetObjectRef.Create(passDotNetObjectByRef), TestDto = DotNetObjectReference.Create(passDotNetObjectByRef),
}; };
var result = await JSRuntime.InvokeAsync<ReceiveDotNetObjectByRefArgs>("receiveDotNetObjectByRefAsync", passDotNetObjectByRefArg); var result = await JSRuntime.InvokeAsync<ReceiveDotNetObjectByRefArgs>("receiveDotNetObjectByRefAsync", passDotNetObjectByRefArg);
ReceiveDotNetObjectByRefAsyncResult["stringValueUpper"] = result.StringValueUpper; ReceiveDotNetObjectByRefAsyncResult["stringValueUpper"] = result.StringValueUpper;
@ -153,7 +153,7 @@
var passDotNetObjectByRefArg = new PassDotNetObjectByRefArgs var passDotNetObjectByRefArg = new PassDotNetObjectByRefArgs
{ {
StringValue = "My string", StringValue = "My string",
TestDto = DotNetObjectRef.Create(passDotNetObjectByRef), TestDto = DotNetObjectReference.Create(passDotNetObjectByRef),
}; };
var result = inProcRuntime.Invoke<ReceiveDotNetObjectByRefArgs>("receiveDotNetObjectByRef", passDotNetObjectByRefArg); var result = inProcRuntime.Invoke<ReceiveDotNetObjectByRefArgs>("receiveDotNetObjectByRef", passDotNetObjectByRefArg);
ReceiveDotNetObjectByRefResult["stringValueUpper"] = result.StringValueUpper; ReceiveDotNetObjectByRefResult["stringValueUpper"] = result.StringValueUpper;
@ -165,7 +165,7 @@
{ {
public string StringValue { get; set; } public string StringValue { get; set; }
public DotNetObjectRef<TestDTO> TestDto { get; set; } public DotNetObjectReference<TestDTO> TestDto { get; set; }
} }
public class ReceiveDotNetObjectByRefArgs public class ReceiveDotNetObjectByRefArgs
@ -174,6 +174,6 @@
public int TestDtoNonSerializedValue { get; set; } public int TestDtoNonSerializedValue { get; set; }
public DotNetObjectRef<TestDTO> TestDto { get; set; } public DotNetObjectReference<TestDTO> TestDto { get; set; }
} }
} }

View File

@ -51,7 +51,7 @@ namespace BasicTestApp.InteropTest
public static void VoidWithThreeParameters( public static void VoidWithThreeParameters(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3) DotNetObjectReference<TestDTO> parameter3)
{ {
Invocations[nameof(VoidWithThreeParameters)] = new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue() }; Invocations[nameof(VoidWithThreeParameters)] = new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue() };
} }
@ -60,7 +60,7 @@ namespace BasicTestApp.InteropTest
public static void VoidWithFourParameters( public static void VoidWithFourParameters(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4) int parameter4)
{ {
Invocations[nameof(VoidWithFourParameters)] = new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue(), parameter4 }; Invocations[nameof(VoidWithFourParameters)] = new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue(), parameter4 };
@ -70,7 +70,7 @@ namespace BasicTestApp.InteropTest
public static void VoidWithFiveParameters( public static void VoidWithFiveParameters(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4, int parameter4,
long parameter5) long parameter5)
{ {
@ -81,7 +81,7 @@ namespace BasicTestApp.InteropTest
public static void VoidWithSixParameters( public static void VoidWithSixParameters(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4, int parameter4,
long parameter5, long parameter5,
float parameter6) float parameter6)
@ -93,7 +93,7 @@ namespace BasicTestApp.InteropTest
public static void VoidWithSevenParameters( public static void VoidWithSevenParameters(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4, int parameter4,
long parameter5, long parameter5,
float parameter6, float parameter6,
@ -106,7 +106,7 @@ namespace BasicTestApp.InteropTest
public static void VoidWithEightParameters( public static void VoidWithEightParameters(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4, int parameter4,
long parameter5, long parameter5,
float parameter6, float parameter6,
@ -140,7 +140,7 @@ namespace BasicTestApp.InteropTest
public static object[] EchoThreeParameters( public static object[] EchoThreeParameters(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3) DotNetObjectReference<TestDTO> parameter3)
{ {
return new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue() }; return new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue() };
} }
@ -149,7 +149,7 @@ namespace BasicTestApp.InteropTest
public static object[] EchoFourParameters( public static object[] EchoFourParameters(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4) int parameter4)
{ {
return new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue(), parameter4 }; return new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue(), parameter4 };
@ -159,7 +159,7 @@ namespace BasicTestApp.InteropTest
public static object[] EchoFiveParameters( public static object[] EchoFiveParameters(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4, int parameter4,
long parameter5) long parameter5)
{ {
@ -169,7 +169,7 @@ namespace BasicTestApp.InteropTest
[JSInvokable] [JSInvokable]
public static object[] EchoSixParameters(ComplexParameter parameter1, public static object[] EchoSixParameters(ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4, int parameter4,
long parameter5, long parameter5,
float parameter6) float parameter6)
@ -180,7 +180,7 @@ namespace BasicTestApp.InteropTest
[JSInvokable] [JSInvokable]
public static object[] EchoSevenParameters(ComplexParameter parameter1, public static object[] EchoSevenParameters(ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4, int parameter4,
long parameter5, long parameter5,
float parameter6, float parameter6,
@ -193,7 +193,7 @@ namespace BasicTestApp.InteropTest
public static object[] EchoEightParameters( public static object[] EchoEightParameters(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4, int parameter4,
long parameter5, long parameter5,
float parameter6, float parameter6,
@ -230,7 +230,7 @@ namespace BasicTestApp.InteropTest
public static Task VoidWithThreeParametersAsync( public static Task VoidWithThreeParametersAsync(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3) DotNetObjectReference<TestDTO> parameter3)
{ {
Invocations[nameof(VoidWithThreeParametersAsync)] = new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue() }; Invocations[nameof(VoidWithThreeParametersAsync)] = new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue() };
return Task.CompletedTask; return Task.CompletedTask;
@ -240,7 +240,7 @@ namespace BasicTestApp.InteropTest
public static Task VoidWithFourParametersAsync( public static Task VoidWithFourParametersAsync(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4) int parameter4)
{ {
Invocations[nameof(VoidWithFourParametersAsync)] = new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue(), parameter4 }; Invocations[nameof(VoidWithFourParametersAsync)] = new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue(), parameter4 };
@ -251,7 +251,7 @@ namespace BasicTestApp.InteropTest
public static Task VoidWithFiveParametersAsync( public static Task VoidWithFiveParametersAsync(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4, int parameter4,
long parameter5) long parameter5)
{ {
@ -263,7 +263,7 @@ namespace BasicTestApp.InteropTest
public static Task VoidWithSixParametersAsync( public static Task VoidWithSixParametersAsync(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4, int parameter4,
long parameter5, long parameter5,
float parameter6) float parameter6)
@ -276,7 +276,7 @@ namespace BasicTestApp.InteropTest
public static Task VoidWithSevenParametersAsync( public static Task VoidWithSevenParametersAsync(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4, int parameter4,
long parameter5, long parameter5,
float parameter6, float parameter6,
@ -290,7 +290,7 @@ namespace BasicTestApp.InteropTest
public static Task VoidWithEightParametersAsync( public static Task VoidWithEightParametersAsync(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4, int parameter4,
long parameter5, long parameter5,
float parameter6, float parameter6,
@ -325,7 +325,7 @@ namespace BasicTestApp.InteropTest
public static Task<object[]> EchoThreeParametersAsync( public static Task<object[]> EchoThreeParametersAsync(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3) DotNetObjectReference<TestDTO> parameter3)
{ {
return Task.FromResult(new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue() }); return Task.FromResult(new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue() });
} }
@ -334,7 +334,7 @@ namespace BasicTestApp.InteropTest
public static Task<object[]> EchoFourParametersAsync( public static Task<object[]> EchoFourParametersAsync(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4) int parameter4)
{ {
return Task.FromResult(new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue(), parameter4 }); return Task.FromResult(new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue(), parameter4 });
@ -344,7 +344,7 @@ namespace BasicTestApp.InteropTest
public static Task<object[]> EchoFiveParametersAsync( public static Task<object[]> EchoFiveParametersAsync(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4, int parameter4,
long parameter5) long parameter5)
{ {
@ -354,7 +354,7 @@ namespace BasicTestApp.InteropTest
[JSInvokable] [JSInvokable]
public static Task<object[]> EchoSixParametersAsync(ComplexParameter parameter1, public static Task<object[]> EchoSixParametersAsync(ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4, int parameter4,
long parameter5, long parameter5,
float parameter6) float parameter6)
@ -366,7 +366,7 @@ namespace BasicTestApp.InteropTest
public static Task<object[]> EchoSevenParametersAsync( public static Task<object[]> EchoSevenParametersAsync(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4, int parameter4,
long parameter5, long parameter5,
float parameter6, float parameter6,
@ -379,7 +379,7 @@ namespace BasicTestApp.InteropTest
public static Task<object[]> EchoEightParametersAsync( public static Task<object[]> EchoEightParametersAsync(
ComplexParameter parameter1, ComplexParameter parameter1,
byte parameter2, byte parameter2,
DotNetObjectRef<TestDTO> parameter3, DotNetObjectReference<TestDTO> parameter3,
int parameter4, int parameter4,
long parameter5, long parameter5,
float parameter6, float parameter6,
@ -390,26 +390,26 @@ namespace BasicTestApp.InteropTest
} }
[JSInvokable] [JSInvokable]
public static Dictionary<string, DotNetObjectRef<TestDTO>> ReturnDotNetObjectByRef() public static Dictionary<string, DotNetObjectReference<TestDTO>> ReturnDotNetObjectByRef()
{ {
return new Dictionary<string, DotNetObjectRef<TestDTO>> return new Dictionary<string, DotNetObjectReference<TestDTO>>
{ {
{ "Some sync instance", DotNetObjectRef.Create(new TestDTO(1000)) } { "Some sync instance", DotNetObjectReference.Create(new TestDTO(1000)) }
}; };
} }
[JSInvokable] [JSInvokable]
public static async Task<Dictionary<string, DotNetObjectRef<TestDTO>>> ReturnDotNetObjectByRefAsync() public static async Task<Dictionary<string, DotNetObjectReference<TestDTO>>> ReturnDotNetObjectByRefAsync()
{ {
await Task.Yield(); await Task.Yield();
return new Dictionary<string, DotNetObjectRef<TestDTO>> return new Dictionary<string, DotNetObjectReference<TestDTO>>
{ {
{ "Some async instance", DotNetObjectRef.Create(new TestDTO(1001)) } { "Some async instance", DotNetObjectReference.Create(new TestDTO(1001)) }
}; };
} }
[JSInvokable] [JSInvokable]
public static int ExtractNonSerializedValue(DotNetObjectRef<TestDTO> objectByRef) public static int ExtractNonSerializedValue(DotNetObjectReference<TestDTO> objectByRef)
{ {
return objectByRef.Value.GetNonSerializedValue(); return objectByRef.Value.GetNonSerializedValue();
} }
@ -425,7 +425,7 @@ namespace BasicTestApp.InteropTest
ThisTypeName = GetType().Name, ThisTypeName = GetType().Name,
StringValueUpper = input.StringValue.ToUpperInvariant(), StringValueUpper = input.StringValue.ToUpperInvariant(),
IncomingByRef = input.DTOByRef.Value.GetNonSerializedValue(), IncomingByRef = input.DTOByRef.Value.GetNonSerializedValue(),
OutgoingByRef = DotNetObjectRef.Create(new TestDTO(1234)), OutgoingByRef = DotNetObjectReference.Create(new TestDTO(1234)),
}; };
} }
@ -441,7 +441,7 @@ namespace BasicTestApp.InteropTest
ThisTypeName = GetType().Name, ThisTypeName = GetType().Name,
StringValueUpper = input.StringValue.ToUpperInvariant(), StringValueUpper = input.StringValue.ToUpperInvariant(),
IncomingByRef = input.DTOByRef.Value.GetNonSerializedValue(), IncomingByRef = input.DTOByRef.Value.GetNonSerializedValue(),
OutgoingByRef = DotNetObjectRef.Create(new TestDTO(1234)), OutgoingByRef = DotNetObjectReference.Create(new TestDTO(1234)),
}; };
} }
@ -449,7 +449,7 @@ namespace BasicTestApp.InteropTest
{ {
public string StringValue { get; set; } public string StringValue { get; set; }
public DotNetObjectRef<TestDTO> DTOByRef { get; set; } public DotNetObjectReference<TestDTO> DTOByRef { get; set; }
} }
public class InstanceMethodOutput public class InstanceMethodOutput
@ -460,7 +460,7 @@ namespace BasicTestApp.InteropTest
public int IncomingByRef { get; set; } public int IncomingByRef { get; set; }
public DotNetObjectRef<TestDTO> OutgoingByRef { get; set; } public DotNetObjectReference<TestDTO> OutgoingByRef { get; set; }
} }
} }
} }

View File

@ -33,10 +33,10 @@
try try
{ {
using var cancellationTokenSource = new System.Threading.CancellationTokenSource(TimeSpan.FromSeconds(1)); using var cancellationTokenSource = new System.Threading.CancellationTokenSource(TimeSpan.FromSeconds(1));
await JSRuntime.InvokeAsync<object>( await JSRuntime.InvokeVoidAsync(
"asyncFunctionTakesLongerThanDefaultTimeoutToResolve", "asyncFunctionTakesLongerThanDefaultTimeoutToResolve",
Array.Empty<object>(), cancellationTokenSource.Token,
cancellationTokenSource.Token); Array.Empty<object>());
} }
catch (TaskCanceledException) catch (TaskCanceledException)
{ {

View File

@ -1,6 +1,8 @@
@inject NavigationManager NavigationManager @using Microsoft.JSInterop
@inject Microsoft.JSInterop.IJSRuntime JSRuntime
@using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Routing
@inject IJSRuntime JSRuntime
@inject NavigationManager NavigationManager
@implements IDisposable @implements IDisposable
<button @onclick="Navigate">Navigate</button> <button @onclick="Navigate">Navigate</button>
@ -29,7 +31,6 @@
async Task Navigate() async Task Navigate()
{ {
await JSRuntime.InvokeAsync<object>("navigationManagerNavigate"); await JSRuntime.InvokeVoidAsync("navigationManagerNavigate");
} }
} }

View File

@ -6,13 +6,13 @@ namespace BasicTestApp.ServerReliability
public class JSInterop public class JSInterop
{ {
[JSInvokable] [JSInvokable]
public static DotNetObjectRef<ImportantInformation> CreateImportant() public static DotNetObjectReference<ImportantInformation> CreateImportant()
{ {
return DotNetObjectRef.Create(new ImportantInformation()); return DotNetObjectReference.Create(new ImportantInformation());
} }
[JSInvokable] [JSInvokable]
public static string ReceiveTrivial(DotNetObjectRef<TrivialInformation> information) public static string ReceiveTrivial(DotNetObjectReference<TrivialInformation> information)
{ {
return information.Value.Message; return information.Value.Message;
} }

View File

@ -5,7 +5,7 @@ namespace TestContentPackage
{ {
public static class MyPrompt public static class MyPrompt
{ {
public static Task<string> Show(IJSRuntime jsRuntime, string message) public static ValueTask<string> Show(IJSRuntime jsRuntime, string message)
{ {
return jsRuntime.InvokeAsync<string>( return jsRuntime.InvokeAsync<string>(
"TestContentPackage.showPrompt", // Keep in sync with identifiers in the.js file "TestContentPackage.showPrompt", // Keep in sync with identifiers in the.js file

View File

@ -11,14 +11,14 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures
{ {
internal class UnsupportedJavaScriptRuntime : IJSRuntime internal class UnsupportedJavaScriptRuntime : IJSRuntime
{ {
public Task<T> InvokeAsync<T>(string identifier, params object[] args) public ValueTask<TValue> InvokeAsync<TValue>(string identifier, CancellationToken cancellationToken, object[] args)
{ {
throw new InvalidOperationException("JavaScript interop calls cannot be issued during server-side prerendering, because the page has not yet loaded in the browser. Prerendered components must wrap any JavaScript interop calls in conditional logic to ensure those interop calls are not attempted during prerendering."); throw new InvalidOperationException("JavaScript interop calls cannot be issued during server-side prerendering, because the page has not yet loaded in the browser. Prerendered components must wrap any JavaScript interop calls in conditional logic to ensure those interop calls are not attempted during prerendering.");
} }
public Task<TValue> InvokeAsync<TValue>(string identifier, IEnumerable<object> args, CancellationToken cancellationToken = default) ValueTask<TValue> IJSRuntime.InvokeAsync<TValue>(string identifier, object[] args)
{ {
throw new InvalidOperationException("JavaScript interop calls cannot be issued during server-side prerendering, because the page has not yet loaded in the browser. Prerendered components must wrap any JavaScript interop calls in conditional logic to ensure those interop calls are not attempted during prerendering."); throw new InvalidOperationException("JavaScript interop calls cannot be issued during server-side prerendering, because the page has not yet loaded in the browser. Prerendered components must wrap any JavaScript interop calls in conditional logic to ensure those interop calls are not attempted during prerendering.");
} }
} }
} }