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

Blazor Server端在自定义类中使用ProtectedSessionStorage报空引用异常

问题原因

你遇到的空引用异常是因为[Inject]属性注入仅适用于Blazor框架托管的Razor组件,普通自定义类如果不是由依赖注入(DI)容器负责实例化,框架不会自动为[Inject]标记的属性赋值,你手动new FuncionesVarias()生成的实例中,SessionStorage属性始终为null,调用方法时就会抛出异常。

解决方案

方案1:使用构造函数注入(推荐)

  • 第一步:修改自定义类,改为构造函数传入依赖
public class FuncionesVarias
{
    private readonly ProtectedSessionStorage _sessionStorage;
    
    // 通过构造函数接收注入的SessionStorage
    public FuncionesVarias(ProtectedSessionStorage sessionStorage)
    {
        _sessionStorage = sessionStorage;
    }        

    public async Task LeoSessionStorage()
    {                    
        var miSingleton = MiSingleton.Instancia;            
        var result = await _sessionStorage.GetAsync<string>("SS");
        miSingleton.ValorEnSesion = result.Success ? result.Value : string.Empty;  
    }
}
  • 第二步:在项目的Program.cs中注册该自定义类为服务
// 可根据业务需求选择AddScoped/AddTransient/AddSingleton
builder.Services.AddScoped<FuncionesVarias>();
  • 第三步:所有需要使用FuncionesVarias的场景,都通过DI注入获取实例,不要手动new
    • Razor组件中使用:在组件顶部添加@inject FuncionesVarias MisFunciones,直接调用MisFunciones.LeoSessionStorage()即可
    • 其他自定义服务中使用:同样通过构造函数注入FuncionesVarias实例

方案2:手动传递服务提供器(仅特殊场景使用)

如果确实需要手动实例化FuncionesVarias,可以将IServiceProvider作为参数传入,手动解析出ProtectedSessionStorage实例,不推荐常规场景使用,容易导致服务生命周期管理混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:15:03