如何在program.cs中使用appsettings.json而不发出警告“ASP0000从应用程序代码调用'BuildServiceProvider'会产生副本......”

问题描述 投票:0回答:1

我正在构建一个 .net 最小 api,其中包含通过 appsettings.json 定义的许多设置。

但是如何在program.cs中使用此设置类而不让编译器生成警告:

ASP0000 从应用程序代码结果中调用“BuildServiceProvider” 在正在创建的单例服务的附加副本中。考虑 替代方案,例如将依赖注入服务作为参数 “配置”。

我所做的是:

var builder = WebApplication.CreateBuilder(args); // Create a WebApplication builder
builder.Services.AddEndpointsApiExplorer();

builder.Services.Configure<MYSettingFromAppsettings>(
    builder.Configuration.GetSection(MYSettingFromAppsettings.Position));
builder.Services.AddSingleton(resolver =>
    resolver.GetRequiredService<IOptions<MYSettingFromAppsettings>>().Value);

...//same for all the other settings

var corsConfig = builder.Services.BuildServiceProvider().GetRequiredService<MYSettingFromAppsettings>();

// use settings

需要明确的是,我不仅使用program.cs中的设置,我还通过服务中的DI使用它(IOptions选项)

那么,在 program.cs 中以及通过 DI 使用类型保存设置类的最佳实践是什么?

c# appsettings minimal-apis
1个回答
0
投票

以下:

var corsConfig = builder.Services.BuildServiceProvider().GetRequiredService<MYSettingFromAppsettings>();

构建应该避免的服务提供商。

如果您需要在构建容器之前绑定配置,您可以执行以下操作:

var cfg = config.GetSection(MYSettingFromAppsettings.Position)
   .Get<MYSettingFromAppsettings>();
© www.soinside.com 2019 - 2024. All rights reserved.