【发布时间】:2020-09-26 12:02:52
【问题描述】:
我正在尝试在 Blazor 服务器端应用程序上创建用户特定的特定单例对象。有没有办法使用 .NET Core 依赖注入系统来实现这一点?我试过下面的代码。我已经创建了 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 文件中的 Counter 属性
@page "/"
@inject SingletonTest singletonTest;
Counter: @singletonTest.Counter
当我尝试在两个不同的浏览器中访问索引页时,它们都在访问 SingletonTest 类的同一个实例。我有办法制作这个用户特定的单例吗?一旦浏览器关闭,服务器需要处理用户特定的单例对象并调用垃圾收集器。
【问题讨论】:
-
如果你的单例存储了一个字典,由用户键入,而不是单个值?另外,不要期望 ++ 是线程安全的。
-
您是打算限制可以使用该应用的用户数量,还是定期重启应用池?这充其量是一个有问题的设计。
-
这也是数据库的用途。
-
@3Dave 没有用户限制,不会重新启动应用程序池。一旦浏览器关闭服务器需要处理用户创建的对象。
-
@mjwills 有没有办法检测用户并添加到字典中并在关闭浏览器后(信号器断开连接后)处理?
标签: c# asp.net-core .net-core dependency-injection blazor-server-side