web-dev-qa-db-ja.com

Blazorクラスにサービス(AuthenticationStateProvider)を挿入する方法

Blazorサーバーのクラスにサービス(AuthenticationStateProvider)を挿入するのに苦労しています。かみそりコンポーネントでそれを行う場合、それは非常に簡単です:

@inject AuthenticationStateProvider AuthenticationStateProvider

その後

private async Task LogUsername()
{
    var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
    var user = authState.User;

    if (user.Identity.IsAuthenticated)
    {
       ClientMachineName = $"{user.Identity.Name}";
    }
    else
    {
       ClientMachineName = "Unknown";
    }
} 

ただし、これを行う必要があります。つまり、かみそりコンポーネントではなく、クラスで認証済みユーザーのマシン名を取得します。

私が試した例:

[Inject]
AuthenticationStateProvider AuthenticationStateProvider { get; set; }

public async Task LogUsername()
{        
    var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
    var user = authState.User;

    if (user.Identity.IsAuthenticated)
    {
        ClientMachineName = $"{user.Identity.Name}";
    }
    else
    {
        ClientMachineName = "Unknown";
    }
}

しかし、これはうまくいかないようです。

どんな助けでも大歓迎です。

3
Peter Pirc

あなたのstartup.csにいくつかのサービスを追加する場合

services.AddScoped<TokenProvider>();
services.AddTransient<TokenRefreshService>();
services.Add<GraphServiceService>();

あなたはかみそりのページでそれらのタイプによってそれらを注入することができます

@inject TokenProvider _token
@inject TokenRefreshService _tokenrefresh
@inject GraphServiceService _graphservice

これらのサービスクラスは、コンストラクタを通じて注入します。

public GraphServiceClass(AuthenticationStateProvider _AuthenticationStateProvider, TokenProvider _token)
{
    AuthenticationStateProvider = _AuthenticationStateProvider;
    token = _token;
}

私はこれをお勧めします: ASP.NET Core Blazor依存性注入

0