gpt4 book ai didi

c# - .net core 3依赖注入(inject)服务作为参数 'configure'

转载 作者:行者123 更新时间:2023-12-01 18:47:26 25 4
gpt4 key购买 nike

我刚刚将 .net core 应用程序从版本 2.2 升级到 3。在startup.cs 的ConfigureServices 方法中,我需要解析身份验证服务使用的服务。我正在使用“services.BuildServiceProvider()”“构建”所有服务,但 .net core 3 提示该方法创建服务的附加副本,并建议我将依赖项注入(inject)服务作为“配置”的参数。我不知道这个建议是什么意思,我想理解它。

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...
};
}
}

最佳答案

but .net core 3 complains about the method creating additional copies of the services and suggesting me to dependency injecting services as parameters to 'configure'.

实际上,ServiceCollection.BuildServiceProvider() 应该由主机自动调用。您的代码 services.BuildServiceProvider(); 将创建一个与默认服务提供商不同重复服务提供商,这可能会导致不一致 服务状态。请参阅a bug caused by multiple Service Provider here

要解决这个问题,configure the options with dependency injection而不是创建服务提供者然后定位服务。

对于您的代码,请按如下方式重写:

services.AddSingleton<IManageJwtAuthentication, JwtAuthenticationManager>();

services.AddOptions<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme)
.Configure<IManageJwtAuthentication>((opts,jwtAuthManager)=>{
opts.TokenValidationParameters = new TokenValidationParameters
{
AudienceValidator = jwtAuthManager.AudienceValidator,
// More code here...
};
});

services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer();

关于c# - .net core 3依赖注入(inject)服务作为参数 'configure',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58212736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com