首页 > 解决方案 > Blazor ProtectedSessionStorage 对象 NULL

问题描述

我在 ProtectedSessionStorage 上创建了一个帮助类来读取/写入数据

using Microsoft.AspNetCore.ProtectedBrowserStorage;
public class SessionObjectHelper
{
    [Inject] private ProtectedSessionStorage ProtectedSessionStore { get; set; }
    
    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);
    }       
}

如果我从 Component 调用这些方法中的任何一个,如下所示,ProtectedSessionStore 始终为 NULL

[Inject] private SessionObjectHelper SessionObjectHelper { get; set; }

protected override async Task OnInitializedAsync()
{
    var testProperty= await SessionObjectHelper.GetTestProperty();
}

标签: c#blazorsession-storage

解决方案


你的SessionObjectHelper类应该声明一个构造函数来获取注入的服务,而不是使用[Inject]属性,例如

    public class SessionObjectHelper
    {
        private ProtectedSessionStorage storage;

        public SessionObjectHelper(ProtectedSessionStorage storage)
        {
                this.storage = storage;
        }

[Inject]属性旨在与 Razor 组件一起使用,而不是常规类。

然后你可以使用

[Inject] public SessionObjectHelper SessionObjectHelper { get; set; }

在你的组件中。注意我改为public- 如果它是私有的,则运行时将无法查看/设置它。


推荐阅读