gpt4 book ai didi

asp.net-core - blazor 范围服务初始化两次

转载 作者:行者123 更新时间:2023-12-04 16:27:19 25 4
gpt4 key购买 nike

我正在尝试学习 asp.net 核心,更具体地说是 blazor 服务器。从文档中可以看出,注册为 scoped 的服务将在每个连接中创建一次。我的用户服务构造函数在浏览器中第一次加载页面时运行两次,在每次刷新页面时再次运行两次。

我相信这些是代码的适用部分,可帮助我确定发生这种情况的原因。我的问题是如何让它为每个客户端连接创建一个用户服务实例?我在屏幕上得到了正确的输出,但不希望它运行两次。

public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddHttpContextAccessor();
services.AddDbContext<AWMOPSContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("AWMOPSContext")),
ServiceLifetime.Transient);
services.AddScoped<UserService>();

}
public class UserService
{
public Associate Associate { get; set; }

public UserService(AWMOPSContext context, IHttpContextAccessor httpContextAccessor)
{
var username = httpContextAccessor.HttpContext.User.Identity.Name.Substring(7);
Associate = context.Associates.Where(a => a.LogonName == username).FirstOrDefault();
Debug.WriteLine($"Hello {Associate.PreferredName} {Associate.LastName}");
}
}
@page "/"
@inject AWMWP.Services.UserService user;

<h1>Welcome @user.Associate.PreferredName @user.Associate.LastName</h1>

最佳答案

它被调用了两次,因为您使用的是预渲染。转到_Host.cshtml,将render-mode="ServerPrerendered"改为render-mode="Server",它只会被调用一次:

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

引用:

https://learn.microsoft.com/en-us/aspnet/core/blazor/lifecycle?view=aspnetcore-3.1#stateful-reconnection-after-prerendering

关于asp.net-core - blazor 范围服务初始化两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60996170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com