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

Blazor自定义会话存储辅助类中ProtectedSessionStorage为NULL如何解决?

问题原因

  • ASP.NET Core 自带的依赖注入容器默认仅支持构造函数注入,[Inject] 属性注入是 Blazor 组件的专属特性,不会对自定义普通类生效,因此你在 SessionObjectHelper 中加的注入标注不会被容器识别,ProtectedSessionStore 属性自然不会被自动赋值
  • 你没有将 SessionObjectHelper 正确注册到依赖注入容器,容器无法感知这个类的依赖关系,也不会负责创建它的实例并注入依赖

解决方法

1. 改造辅助类,改用构造函数注入依赖

放弃属性注入的写法,改用 ASP.NET Core 依赖注入的标准构造函数注入方式:

using Microsoft.AspNetCore.ProtectedBrowserStorage;
public class SessionObjectHelper
{
    private readonly ProtectedSessionStorage _protectedSessionStore;
    
    public SessionObjectHelper(ProtectedSessionStorage protectedSessionStore)
    {
        _protectedSessionStore = protectedSessionStore;
    }
    
    public async Task<string> GetTestProperty()
    {
        var value = await _protectedSessionStore.GetAsync<string>("TestProperty") ?? string.Empty;
        return value;
    }
    
    public async Task SetTestProperty(string value)
    {
        await _protectedSessionStore.SetAsync("TestProperty", value);
    }       
}

2. 注册辅助类到依赖注入容器

在项目的 Program.cs(.NET 6 及以上版本)的服务注册区域,添加 SessionObjectHelper 的注册规则,会话相关的服务一般注册为 Scoped 生命周期即可:

// Blazor WebAssembly / Blazor Server 通用注册写法
builder.Services.AddScoped<SessionObjectHelper>();

3. 组件侧代码无需修改

你原本在组件中注入并调用 SessionObjectHelper 的代码可以直接使用,此时容器创建的 SessionObjectHelper 实例已经完成依赖初始化,不会再出现 ProtectedSessionStore 为 null 的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:24:04