我刚刚将一个.NET Core应用程序从2.2版本升级到3版本。 在startup.cs文件中的ConfigureServices方法内,我需要解析一个由身份验证服务使用的服务。 我之前使用"services.BuildServiceProvider()"构建了所有的服务,但是.NET Core 3提示该方法会创建额外的服务副本,并建议我将服务作为参数进行依赖注入到'configure'方法中。 我不知道这个建议是什么意思,我想要理解它。
public virtual void ConfigureServices(IServiceCollection services)
{
// Need to resolve this.
services.AddSingleton<IManageJwtAuthentication, JwtAuthenticationManager>();
var sp = services.BuildServiceProvider(); // COMPLAINING HERE!!
var jwtAuthManager = sp.GetRequiredService<IManageJwtAuthentication>();
services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(c =>
{
c.TokenValidationParameters = new TokenValidationParameters
{
AudienceValidator = jwtAuthManager.AudienceValidator,
// More code here...
};
}
}
AuthenticationSchemeOptions
(例如JwtBearerOptions)。我们可以通过AddScheme<>(action)
(例如AddJwtBearer(action))进行配置,或者通过选项构建器进行配置,以便我们可以在不构建服务提供程序的情况下注入服务。在这种情况下,每当调用身份验证服务时,都会调用您的jwtAuthManager服务。 - itminus