我对 .net8 中的双项目设置有点困惑,特别是围绕 DI 和不同渲染模式之间共享状态。
现在,以这个示例服务为例
public class GuidService
{
public Guid Guid { get; } = Guid.NewGuid();
}
将其作为客户端项目中的单例添加到服务器项目中,根据组件是否呈现为静态 SSR、交互式服务器或交互式 WASM,我会获得不同的值。
此外,当我从该页面导航离开(在同一个应用程序中,而不是离开或刷新)并返回时,交互式 WASM 和交互式服务器显示的 GUID 与之前相同,这是我所期望的。然而,我没想到的是,每次我导航到不同的页面并返回时,静态 SSR 组件都会获得一个新的 Guid。
您需要考虑三种不同的应用程序,但有些不同。
您可以将预渲染状态从 SSSR 传递到 SPA。请参阅 - https://learn.microsoft.com/en-us/aspnet/core/blazor/components/prerender?view=aspnetcore-8.0#persist-prerendered-state。
否则,正如 Brian Parker 建议的那样,您需要考虑无状态或在应用程序上下文之外保留状态。
我在这里更详细地介绍了该主题:https://github.com/ShaunCurtis/Blazor.ExploreRendering/blob/master/Documents/Going-For-Broke.md