BlazoredLocalStorage 偷偷注册失败?

问题描述 投票:0回答:1

我创建了一个 .NET8 Blazor 项目(客户端和服务器端),并为客户端添加了 Blazored.LocalStorage nuget 包。在

Program.cs
文件中,我添加服务注册行:

builder.Services.AddBlazoredLocalStorage();

然后,在我想使用它的页面上,我注入实例:

@inject ILocalStorageService _localStorage

不幸的是,当我启动网络应用程序时,我在浏览器中看到错误:

InvalidOperationException:无法为属性提供值 类型“MyProject.Client.Pages.Login”上的“_localStorage”。没有注册的 类型为“Blazored.LocalStorage.ILocalStorageService”的服务。

我做错了什么?

c# asp.net-core razor dependency-injection blazor
1个回答
0
投票

要检查您是否使用全局渲染模式,您可以打开“服务器项目”-Components- App.razor。
全球:

    <HeadOutlet @rendermode="InteractiveWebAssembly" />
    <Routes @rendermode="InteractiveWebAssembly" />

每页:您需要在每页的任意顶部手动添加

@rendermode InteractiveWebAssembly
。 (不添加时,仅使用服务器端渲染)

    <HeadOutlet />
    <Routes />

没有类型为“Blazored.LocalStorage.ILocalStorageService”的已注册服务。

您需要将

builder.Services.AddBlazoredLocalStorage();
添加到服务器项目和客户端项目。这是因为
@rendermode InteractiveWebAssembly
仍将在服务器 1 上预渲染。预渲染SSR(服务器端渲染)是在服务器项目中执行的。

但由于SSR实际上根本无法访问本地存储。您将需要禁用预渲染。为此:
如果您使用全局渲染模式,请更改 App.razor,例如

    <Routes @rendermode="new InteractiveWebAssemblyRenderMode(false)" />

如果您使用每个组件,请在页面顶部添加渲染模式,例如

@rendermode @(new InteractiveWebAssemblyRenderMode(false))

参考:https://learn.microsoft.com/en-us/aspnet/core/blazor/components/render-modes?view=aspnetcore-8.0#prerendering

© www.soinside.com 2019 - 2024. All rights reserved.