我试图在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对象并调用垃圾收集器。
如果您希望它仅可用于单个浏览器实例,则需要添加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