【问题标题】:How to consume Blazored.LocalStorage inside a .cs class instead a Blazor page?如何在 .cs 类而不是 Blazor 页面中使用 Blazored.LocalStorage?
【发布时间】:2021-06-03 01:36:19
【问题描述】:

我看到很多以这种方式工作的示例,但这对我不起作用。有什么帮助吗?

Program.cs

...
using Blazored.LocalStorage;
using TestFullPage.Classes;

namespace TestFullPage
{
public class Program
{
    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.RootComponents.Add<App>("#app");
        builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
        builder.Services.AddBlazoredLocalStorage();
        builder.Services.AddSingleton<Session>();
        await builder.Build().RunAsync();
    }
}
}

Session.cs

...
using Microsoft.AspNetCore.Components;
using Blazored.LocalStorage;

namespace TestFullPage.Classes
{
public class Session
{
    [Inject]
    public ILocalStorageService LocalStorage { get; set; }
    public void updateLocalStorage()
    {
        LocalStorage.SetItemAsync("test", "123");
    }
}
}

Index.razor

@page "/"
@inject Session sesssion

<button @onclick="() =>Write()">Write to LocalStorage</button>

@code {
public void Write() {
    sesssion.updateLocalStorage();
}

}

未处理的异常渲染组件:对象引用未设置为对象的实例。 System.NullReferenceException: 对象引用未设置到实例 ---> LocalStorage.SetItemAsync("test", "123");

【问题讨论】:

  • 你的代码在我的机器上工作得很好你能发布你的组件的完整代码和'updateLocalStorage'的调用者吗?还有任何理由将课堂会话用作单身人士吗?
  • 好吧..我没有把所有的原始代码都放在不让线程沉重和难以理解的情况下,但是这个类有很多函数需要成为一个singleTon。即使在 SingleTon 课程中,这对您也有用吗?我稍后会为您更新电话...需要为此创建一个更好的样板...因为我有一个调用此方法的组件。但请耐心等待!谢谢!
  • @yasseros,刚刚更新了通话。

标签: blazor blazor-webassembly


【解决方案1】:

您将“会话”类用作“组件类”,但事实并非如此 用这个替换它,它应该可以工作:

 public class Session
    {
        protected readonly ILocalStorageService _localStorage;

        public Session(ILocalStorageService LocalStorage)
        {
            _localStorage = LocalStorage; 

        }

        public void updateLocalStorage()
        {
            _localStorage.SetItemAsync("test", "123");
        }
    }

您需要将“会话”从单例更改为铲起,请参阅此线程: How to properly use Dependency Injection in Backend in Blazor Server?

【讨论】:

  • 确定吗?因为...这不是 Blazer 服务器...它是 wasm...无论如何都可以使用?
  • 为什么它不能工作?究竟是哪一部分?
  • 因为你给我发了一个链接“如何在 Blazor Server 的后端正确使用依赖注入?” - 但是没关系 !关键是:现在它可以工作了!
猜你喜欢
  • 1970-01-01
  • 2015-11-25
  • 1970-01-01
  • 2020-11-19
  • 2020-04-18
  • 2020-03-14
  • 1970-01-01
  • 2019-12-30
  • 2021-11-11
相关资源
最近更新 更多