如何在类中使用blazor作用域服务

问题描述

我正在尝试对AuthenticationStateProvider使用范围服务,以在解决方案的不同类中获取用户详细信息。 用作范围服务的服务类如下所示:

public class ServiceClass
{
    private readonly AuthenticationStateProvider _authenticationStateProvider;

    public ServiceClass(AuthenticationStateProvider authenticationStateProvider)
    {
        _authenticationStateProvider = authenticationStateProvider;
    }
    public async Task<string> GetIdentity()
    {
        var authState = await _authenticationStateProvider.GetAuthenticationStateAsync();
        var user = authState.User;
        return user.Identity.Name;
    }}

我在启动时将类注册为这样的作用域服务:

services.AddScoped<ServiceClass>();

然后尝试像这样在另一个类DAL中使用服务

 public class DAL
{

    private readonly ServiceClass userClass;
    public async Task<bool> saveBankCash(TransactionBankCashHeader master,List<TransactionBankCashDetail> lines,string Doctype)
    {


        string user = await userClass.GetIdentity();
    }
}

但是在saveBankCash方法中,userClass为null,有人可以指导我这里有什么问题吗?

解决方法

您需要像这样向DAL添加构造函数:

public DAL(ServiceClass s)
{
 userClass = s; 
}

请注意,这仅在将DAL也添加到DI时才有效,如下所示:

services.AddScoped<DAL>();

然后,DI将把依赖项注入到构造函数的调用中。