c# - ASP.NET Core 3.0:禁用 ASP0000 不要在“ConfigureServices”中调用“IServiceCollection.BuildServiceProvider”
问题描述
我有一个 ASP.NET Core 3.0 应用程序。在 Startup 类中,在方法中
public void ConfigureServices(IServiceCollection services)
我想配置身份验证,以便 JWT 由我的 ISecurityTokenValidator 实现处理:CustomJwtSecurityTokenHandler。为此,我需要获取我的实现类 CustomJwtSecurityTokenHandler 的实例,它的构造函数需要注入一些服务。因此,我需要致电:
var serviceProvider = services.BuildServiceProvider();
为了创建一个“临时” serviceProvider 来获取我的带有注入参数的 CustomJwtSecurityTokenHandler 实例。
我最终得到了这段代码(效果很好!):
services.AddAuthentication(authenticationOptions =>
{
authenticationOptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
authenticationOptions.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(jwtBearerOptions =>
{
jwtBearerOptions.SecurityTokenValidators.Clear();
CustomJwtSecurityTokenHandler customJwtSecurityTokenHandler;
{
// create a temporary serviceProvider, in order to retrieve a CustomJwtSecurityTokenHandler (supposed to be registered as addin!).
var serviceProvider = services.BuildServiceProvider();
customJwtSecurityTokenHandler = serviceProvider.GetService<CustomJwtSecurityTokenHandler>();
}
//below line adds the custom validator class
jwtBearerOptions.SecurityTokenValidators.Add(customJwtSecurityTokenHandler);
});
只是,从方法 ConfigureServices 中调用 services.BuildServiceProvider() 有一些问题(例如单例),我收到以下警告:
ASP0000 从应用程序代码调用“BuildServiceProvider”会导致创建单例服务的额外副本。考虑替代方案,例如依赖注入服务作为“配置”的参数。
那么.. 配置需要注入其他一些注册服务的服务的好方法是什么?
解决方案
推荐阅读
- r - ggplot - 使用饼图以百分比形式可视化每组中的项目数 - R
- pandas - Pandas 中查询的奇怪行为
- c# - 如何在 ASP.NET Core Identity 2.0 中手动控制声称要添加到用户的角色
- scala - Scala:如果 Map 是从 GroupBy 创建的,为什么不能更改 Map 中的可变值
- shell - 如何在排序文件上使用 uniq-c
- java - 使用 SQL 和 JAVA 生成连续字母数字的最快方法,没有长度为 4 的冒犯性单词
- java - Log4j 无文件输出
- amazon-web-services - AWS S3 - 获取存储桶位置时拒绝访问
- c# - 在 Linux 上的 .NET Core 中从 C# 获取 uname 发布字段
- java - java中ArrayList中相同类型的方法求和值