You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor Server中SessionStorageService依赖注入报错:ProtectedBrowserStorage未注册

Blazor Server中SessionStorageService依赖注入修复方案

问题原因

ProtectedBrowserStorage是Blazor Server存储服务的抽象基类,框架默认未将其注册到依赖注入容器,仅注册了它的两个具体实现:ProtectedLocalStorage(对应本地存储)和ProtectedSessionStorage(对应会话存储)。你试图注入未注册的抽象类,因此返回null并触发报错。

修复步骤

1. 调整SessionStorageService构造函数

如果你的服务用于管理会话存储,直接依赖ProtectedSessionStorage而非抽象的ProtectedBrowserStorage:

public class SessionStorageService
{
    private readonly ProtectedSessionStorage _protectedSessionStorage;
    // 若需操作本地存储,替换为ProtectedLocalStorage

    public SessionStorageService(ProtectedSessionStorage protectedSessionStorage)
    {
        _protectedSessionStorage = protectedSessionStorage;
    }

    // 你的存储操作方法...
}

2. 更新program.cs中的服务注册

简化注册逻辑,让DI自动解析具体服务:

builder.Services.AddScoped<SessionStorageService>();

若需手动实例化(仅针对特殊场景):

builder.Services.AddScoped<SessionStorageService>(x => 
    new SessionStorageService(x.GetRequiredService<ProtectedSessionStorage>()));

可选:手动注册ProtectedBrowserStorage(不推荐)

若坚持使用抽象基类,需手动将具体实现映射到抽象类:

// 注册会话存储版本的ProtectedBrowserStorage
builder.Services.AddScoped<ProtectedBrowserStorage, ProtectedSessionStorage>();
// 若需本地存储版本,替换为:
// builder.Services.AddScoped<ProtectedBrowserStorage, ProtectedLocalStorage>();

// 之后可正常注入ProtectedBrowserStorage
builder.Services.AddScoped<SessionStorageService>(x => 
    new SessionStorageService(x.GetService<ProtectedLocalStorage>(), x.GetService<ProtectedBrowserStorage>()));

关键说明

  • Blazor Server中操作会话存储优先用ProtectedSessionStorage,操作本地存储用ProtectedLocalStorage,二者均为框架预注册服务,无需额外配置。
  • 避免依赖未注册的抽象类,优先使用框架提供的具体实现类,减少不必要的DI配置成本。

内容的提问来源于stack exchange,提问作者IYM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:39:31