Я пытаюсь обнаружить ссылку refre sh в Blazor, чтобы до того, как произойдет refre sh, я сохраняю некоторые данные в локальном хранилище, я пытался удалить, но службы, которые я получаю Данные для сохранения, не являются доступны на этом этапе. Я также попробовал JavaScript window.onbeforeunload и вызвал метод C#, когда это происходит следующим образом:
public static class SessionSaver
{
[JSInvokable]
public static Task SaveServicesToSession()
{
ViewDataService viewData = (ViewDataService)GetMeSomeServiceLocator.Instance.GetService(typeof(ViewDataService));
ProtectedBrowserStorage protectedBrowserStorage = (ProtectedBrowserStorage)GetMeSomeServiceLocator.Instance.GetService(typeof(ProtectedSessionStorage));
protectedBrowserStorage.SetAsync("ViewData", viewData);
protectedBrowserStorage.SetAsync("AuthModel", viewData.AuthModel);
return Task.FromResult("Success.");
}
}
Javascript:
window.onbeforeunload = () => {
DotNet.invokeMethodAsync('BlazorStore9', 'SaveServicesToSession')
.then(message => { console.log(message); });
}
Startup.cs: вложенный класс:
public static class GetMeSomeServiceLocator
{
public static IServiceProvider Instance { get; set; }
}
и в методе конфигурации:
GetMeSomeServiceLocator.Instance = app.ApplicationServices;
JsInvokable вызывается при перезагрузке страницы, но я получаю ошибку:
Система. InvalidOperationException: «Не удается разрешить определенную службу« BlazorStore9.Services.ViewDataService »от поставщика root.
Можно ли что-нибудь сделать, чтобы решить эту проблему?