提问者:小点点

如何在整个应用程序中创建和注入特定于用户的单例类?


我试图在Blazor serverside应用程序上创建一个特定于用户的singleton对象。 有没有一种方法可以使用。NET核心依赖注入系统来实现这一点? 我试过下面的代码。 我已经创建了SingletonTest类。

public class SingletonTest
{
    private int _counter;
    public int Counter { get { return ++_counter; } }
}

在Startup.cs中注入了SingletonTest类

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<SingletonTest>();
}

访问index.razor文件中的计数器属性

@page "/"
@inject SingletonTest singletonTest;
Counter: @singletonTest.Counter

当我尝试在两个不同的浏览器中访问索引页时,两者都在访问SingletOnTest类的同一个单个实例。 我有一种方法可以使这个用户特定的单例吗? 一旦浏览器关闭,服务器需要释放用户特定的singleton对象并调用垃圾收集器。


共1个答案

匿名用户

如果您希望它仅可用于单个浏览器实例,则需要添加Scoped:

services.AddScoped<YourScopedClass>();

您可以使用的另一个东西是预览Nuget包:

Microsoft.AspNetCore.ProtectedBrowserStorage

ProtectedBrowserStorage are的文档在此页面上大约有40%的下降:https://docs.microsoft.com/en-us/aspnet/core/blazor/state-management?view=aspnetcore-3.1

我在一个名为BlazorChat的服务器端Blazor项目中使用了上面的包,它使用一个单例来与所有用户进行通信,但是使用ProtectedBrowserStorage来存储用户的密码散列,电子邮件地址和登录名。

https://github.com/datajuggler/blazorchat

这个网站也是直播的,但是到目前为止除了我还没有人报名。

https://blazorchat.com