为什么Blazor服务器应用程序中的Scoped服务不会为每个设备创建新实例



我使用核心6,并在blazor服务器应用程序中启动一个名为DAL的类作为作用域服务。

它不是为每个连接的设备创建新的DAL实例,而是为所有设备使用相同的实例。我在调试模式下测试了它,它实际上只命中了services.AddScoped<DAL>();行一次。

有什么想法吗?感谢

启动.cs

[Obsolete]
public void ConfigureServices(IServiceCollection services)
{
//This command is for API route
services.AddMvc(setupAction: Options => Options.EnableEndpointRouting = false).SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddSingleton<WeatherForecastService>();
services.AddSingleton<HttpClient>();
services.AddScoped<DAL>();
services.AddBlazoredSessionStorage();
}

_Host.cshtml

<app>
<component type="typeof(App)" render-mode="Server" />
</app>

根据@enet的评论-我不相信。

测试这一点的最简单方法是为DAL的每个实例分配一个GUID。

这是我的Blazor服务器版本。

using System.Diagnostics;
public class DAL
{
public Guid Id { get; } = Guid.NewGuid();
//....
public DAL()
{
Debug.WriteLine($"DAL Service Id created {Id.ToString()}");
}
}

不出所料,我会为打开的每个浏览器窗口获得一个新的Id,它与每个设备相同!

谢谢大家,我发现问题了。它与我的DAL类架构以及我如何在我的剃刀页面中使用它有关。

最新更新