инициализация службы Blazor дважды - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь выучить ядро ​​asp. net, точнее, сервер блазор. Из документации видно, что служба, зарегистрированная в качестве области действия, будет создана один раз для каждого соединения. Мой конструктор пользовательских служб запускается дважды при первой загрузке страницы в браузере и дважды снова при каждом обновлении sh страницы.

Я считаю, что это те части кода, которые необходимы для помощи мне определить, почему это происходит. У меня вопрос, как заставить его создать один экземпляр пользовательского сервиса для каждого клиентского соединения? Я получаю правильный вывод на экран, но не предпочитаю, чтобы он запускался дважды.

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>

1 Ответ

1 голос
/ 03 апреля 2020

Он вызывается дважды, так как вы используете предварительный рендеринг. Go на _Host.cshtml и измените render-mode="ServerPrerendered" на render-mode="Server", и он будет вызван только один раз:

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

Ссылка:

https://docs.microsoft.com/en-us/aspnet/core/blazor/lifecycle?view=aspnetcore-3.1#stateful -подсоединение -после-1011 * предварительной визуализации *

...