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

如何在C#类中注入Blazor Session Storage服务?

普通C#类中注入Blazored SessionStorage的实现方法

首先确认你已经在Program.cs中完成了Blazored SessionStorage的前置服务注册:
builder.Services.AddBlazoredSessionStorage();

Blazor原生的[Inject]特性默认仅对继承自ComponentBase的Razor组件类生效,普通C#类不会被DI容器自动扫描并注入属性值,所以直接加特性不会生效,可采用以下两种方案实现:


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

普通C#类的标准注入方式,符合DI最佳实践:

  • 第一步:在自定义C#类的构造函数中声明ISessionStorageService参数,接收注入的实例
public class MyCustomService
{
    private readonly Blazored.SessionStorage.ISessionStorageService _sessionStorage;

    // 构造函数注入,DI容器创建实例时自动传入对应服务
    public MyCustomService(Blazored.SessionStorage.ISessionStorageService sessionStorage)
    {
        _sessionStorage = sessionStorage;
    }

    // 你的业务方法,可以直接使用_sessionStorage
    public async Task SetValueAsync(string key, string value)
    {
        await _sessionStorage.SetItemAsync(key, value);
    }
}
  • 第二步:在Program.cs中注册你的自定义服务,生命周期要和SessionStorage匹配(默认SessionStorage是Scoped,所以建议自定义服务注册为Scoped或Transient)
    builder.Services.AddScoped<MyCustomService>();
  • 后续使用时直接把MyCustomService注入到组件或者其他服务中即可,无需手动处理SessionStorage的注入逻辑。

方案2:属性注入(需要手动触发)

如果你确实需要在普通C#类中使用[Inject]特性实现属性注入,可以通过Blazor提供的服务注入扩展方法手动触发:

  • 第一步:自定义类中保留[Inject]标记的属性
public class MyCustomClass
{
    [Inject]
    public Blazored.SessionStorage.ISessionStorageService _sessionStorage { get; set; }

    // 其他业务逻辑
}
  • 第二步:创建类实例时,通过IServiceProvider调用InjectProperties扩展方法完成属性注入
    示例(在Razor组件中使用的场景):
@inject IServiceProvider ServiceProvider

@code {
    protected override void OnInitialized()
    {
        var myClass = new MyCustomClass();
        // 手动触发注入,给所有[Inject]标记的属性赋值
        ServiceProvider.InjectProperties(myClass);
        // 此时myClass._sessionStorage已经可以正常使用
    }
}

注意事项

  • 不建议自定义服务注册为Singleton生命周期,会和默认Scoped的SessionStorage产生生命周期不匹配问题,导致异常
  • 尽量优先使用构造函数注入,属性注入仅适合无法修改构造函数的特殊场景
  • 不要手动创建需要注入的服务实例,优先通过DI容器获取实例,避免注入失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:54:02