首页 > 解决方案 > 在 startup.cs 中解析 A​​uthenticationStateProvider

问题描述

我有一个 Blazor 项目。在 startup.cs 中,AuthenticationStateProvider 在后端注入。我正在使用它是一个类的构造函数。

 public class ServiceClass : IServiceClass
{
    public ServiceClass(AuthenticationStateProvider authenticationStateProvider)
    {
        _authenticationStateProvider = authenticationStateProvider;
    }
    private readonly AuthenticationStateProvider _authenticationStateProvider;
    public async Task<string> GetIdentity()
    {
        var identity="";
        return identity;
    } 
}

并且ServiceClass也被注入到startup.cs中

services.AddScoped<IServiceClass, ServiceClass>();

现在我需要注入另一个依赖于 ServiceClass 的服务

 services.AddScoped<IReportServiceConfiguration>(sp =>
            new ReportServiceConfiguration
            {
                ReportingEngineConfiguration = sp.GetService<IConfiguration>(),
                HostAppId = "Html5DemoAppCore",
                Storage = new FileStorage(),
                ReportSourceResolver = new CustomReportSourceResolver(),
            }
            ); ;

但我不能使用ReportSourceResolver = new CustomReportSourceResolver(),因为它在构造函数中有 serviceClass 。而且我不能使用 sp.getService() 因为然后 authenticationStateProvider 被返回 null (由于我认为不同的范围)。如何注册最后一项服务?

我已经尝试使用 IScopeFactory 来替换类构造函数,但认为我们不能使用它,因为创建新范围会返回 AuthenticationStateProvider null。我试过用

 var serviceProvider = services.BuildServiceProvider();
var service = serviceProvider.GetService<CustomReportResolver>();

我认为这不起作用,因为它需要在 BuildServiceProvider() 之前注册所有必需的服务,而且我们不知道 AuthenticationStateProvider 在什么时候被注入。

尝试使用 Autofac 而不是 .Net Core 依赖注入,但遇到了同样的问题,因为 AuthenticationStateProvider 仍然由 .net core DI 系统注册。

标签: c#asp.net-coredependency-injectiontelerik-reporting

解决方案


推荐阅读