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
相关产品推荐
相关产品推荐

