c# - 在 startup.cs 中解析 AuthenticationStateProvider
问题描述
我有一个 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 系统注册。
解决方案
推荐阅读
- html - 代码块中的背景突出显示文本?
- css - primeng p-selectButton 上的背景颜色
- azure - 如何对 Azure Functions 应用进行身份验证以使用 Azure DevOps REST API?
- c# - 使用派生类实例作为参数覆盖方法
- java - Java 计数器程序
- excel - 根据帮助列中的数字对动态范围求和
- python - 如何在 Python 中应用闭开和控制反转原则?
- itext - iText 或 iTextSharp 是否能够在 PDF 上设置编辑密码
- r - R`segmented` - 分段线性拟合,约束一个截距和另一个斜率
- syntax - 程序没有完成整个脚本